tinify-rs 1.2.0

A Rust client for the Tinify API
Documentation

Tinify API client for Rust

Build Status crates.io

Rust client for the Tinify API, used for TinyPNG and TinyJPG. Tinify compresses your images intelligently. Read more at https://tinify.com.

Documentation

Go to the documentation for the HTTP client.

Status

In currently development.

There are still features of TinyPNG to implement.

To look at all the features of Tinify API: Documentation.

Getting Started

Install the API client with Cargo. Add this to Cargo.toml:

[dependencies]
tinify-rs = "1.2.0"

Usage

use tinify::Tinify;
use tinify::TinifyError;

fn main() -> Result<(), TinifyError> {
  let key = "tinify api key";
  let tinify = Tinify::new().set_key(key);
  let client = tinify.get_client()?;
  let _ = client
    .from_file("./unoptimized.jpg")?
    .to_file("./optimized.jpg")?;
    
  Ok(())
}
  • Compress from an url
use tinify::Tinify;
use tinify::TinifyError;

fn main() -> Result<(), TinifyError> {
  let key = "tinify api key";
  let tinify = Tinify::new().set_key(key);
  let client = tinify.get_client()?;
  let _ = client
    .from_url("https://tinypng.com/images/panda-happy.png")?
    .to_file("./optimized.png")?;
    
  Ok(())
}
  • Compress from a buffer
use tinify::Tinify;
use tinify::TinifyError;
use std::fs;

fn main() -> Result<(), TinifyError> {
  let key = "tinify api key";
  let tinify = Tinify::new().set_key(key);
  let client = tinify.get_client()?;
  let bytes = fs::read("./unoptimized.jpg")?;
  let _ = client
    .from_buffer(&bytes)?
    .to_file("./optimized.jpg")?;
     
  Ok(())
}
  • Resize a compressed image.
use tinify::Tinify;
use tinify::Client;
use tinify::TinifyError;
use tinify::resize::Method;
use tinify::resize::Resize;

fn get_client() -> Result<Client, TinifyError> {
  let key = "tinify api key";
  let tinify = Tinify::new();

  tinify
    .set_key(key)
    .get_client()
}

fn main() -> Result<(), TinifyError> {
  let client = get_client()?;
  let _ = client
    .from_file("./unoptimized.jpg")?
    .resize(Resize::new(
      Method::FIT,
      Some(400),
      Some(200)),
    )?
    .to_file("./resized.jpg")?;

  Ok(())
}
  • Converting images.
use tinify::Tinify;
use tinify::convert::Type;
use tinify::TinifyError;

fn main() -> Result<(), TinifyError> {
  let _ = Tinify::new()
  .set_key("api key")
  .get_client()?
  .from_file("./tmp_image.jpg")?
  .convert((
      Some(Type::PNG),
      None,
      None,
    ),
    None,
  )?
  .to_file("./converted.png");

  Ok(())
}
  • Converting images with a transparent background.
use tinify::Tinify;
use tinify::convert::Color;
use tinify::convert::Type;
use tinify::TinifyError;

fn main() -> Result<(), TinifyError> {
  let _ = Tinify::new()
  .set_key("api key")
  .get_client()?
  .from_url("https://tinypng.com/images/panda-happy.png")?
  .convert((
      Some(Type::JPEG),
      None,
      None,
    ),
    Some(Color("#FF5733")),
  )?
  .to_file("./converted.jpg");

  Ok(())
}

Running tests

Create a .env file with a TiniPNG KEY

cargo test

Contribution

All contributions will be welcomed. Feel free to open any issues or pull requests.