Automated image compression for efficiently distributing images on the web.

Overview

Imager

Apparently this project made it into the GitHub Archive Program.

About

Imager is a tool for automated image compression, and can competitively optimize very noisy, high resolution images into rather “tiny” files.

Image Compression Benchmarks

source        : ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 39.00M (4 images)
kraken.io     : ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 24M
jpegmini.com  : ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 16M
compression.ai: ▇▇▇▇▇▇▇▇ 8.90M
imager        : ▇▇▇▇ 4.20M

Resources

Documentation


Copyright 2020 Colbyn Wadman

Comments
  • Update install.md?

    Update install.md?

    Thanks for imager! It's great!

    BTW, I followed instructions in https://github.com/imager-io/imager/blob/master/docs/imager/install.md

    It mentions imager v0.3.3, but it seems to be an auto release of v0.3.4.

    Should the documentation be updated?

    opened by vpoulailleau 2
  • Failure to build on Raspberry Pi

    Failure to build on Raspberry Pi

    I came across your imager project on GitHub while looking at various image compression software. I was able to download and run it on Ubuntu, and it does a fantastic job on compression. Well done on developing this awesome utility!

    I am now trying to compile it for a Raspberry Pi but am running into some errors.

    I followed the steps in the 'install.md' file in the project:

    • curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    • apt-get install -y build-essential llvm-dev libclang-dev clang openssl pkg-config libssl-dev xz-utils
    • git clone https://github.com/imager-io/imager.git && cd imager
    • cargo install --path imager --force

    If I run the compile with the --verbose option I get the following output:

    Running `rustc --crate-name webp_dev --edition=2018 /home/pi/.cargo/registry/src/github.com-1285ae84e5963aae/webp-dev-0.4.1/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -Cembed-bitcode=no --cfg 'feature="default"' -C metadata=0d370911ed82618f -C extra-filename=-0d370911ed82618f --out-dir /tmp/cargo-installKBNy5i/release/deps -L dependency=/tmp/cargo-installKBNy5i/release/deps --extern image=/tmp/cargo-installKBNy5i/release/deps/libimage-a4bacbab917eac6b.rmeta --extern libc=/tmp/cargo-installKBNy5i/release/deps/liblibc-5103d3a8c700d90d.rmeta --cap-lints allow -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out/webmproject-libwebp-8bac456/src -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out/webmproject-libwebp-8bac456/src/demux -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out -l static=webp -l static=webpdemux -l static=cbits`
    error: could not find native static library `webp`, perhaps an -L flag is missing?
    
    error: aborting due to previous error
    
    error: could not compile `webp-dev`.
    
    Caused by:
      process didn't exit successfully: `rustc --crate-name webp_dev --edition=2018 /home/pi/.cargo/registry/src/github.com-1285ae84e5963aae/webp-dev-0.4.1/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -Cembed-bitcode=no --cfg 'feature="default"' -C metadata=0d370911ed82618f -C extra-filename=-0d370911ed82618f --out-dir /tmp/cargo-installKBNy5i/release/deps -L dependency=/tmp/cargo-installKBNy5i/release/deps --extern image=/tmp/cargo-installKBNy5i/release/deps/libimage-a4bacbab917eac6b.rmeta --extern libc=/tmp/cargo-installKBNy5i/release/deps/liblibc-5103d3a8c700d90d.rmeta --cap-lints allow -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out/webmproject-libwebp-8bac456/src -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out/webmproject-libwebp-8bac456/src/demux -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out -l static=webp -l static=webpdemux -l static=cbits` (exit code: 1)
    

    Some system information

    pi@raspberrypi:~ $ lsb_release -a
    No LSB modules are available.
    Distributor ID: Raspbian
    Description:    Raspbian GNU/Linux 10 (buster)
    Release:        10
    Codename:       buster
    
    pi@raspberrypi:~ $ uname -a
    Linux raspberrypi 4.19.93-v7+ #1290 SMP Fri Jan 10 16:39:50 GMT 2020 armv7l GNU/Linux
    

    Any advice on how to fix this?

    opened by InventoryTech 1
  • Updated and simplified INSTALL.md

    Updated and simplified INSTALL.md

    • Updated the download links to the 0.3.4 command. Temporally resolve #7.
    • Replaced the http command to wget. I don’t know what it is, and since I don’t know if it is preinstalled on mac, I haven’t modified that one.
    • Simplified the tar extract command, so it extracts any downloaded imager builds, regardless of the downloaded version.
    opened by PoorPocketsMcNewHold 0
  • How does the software work?

    How does the software work?

    Hi! First of all, I would like to really thank you for writing such a software, I've found it incredibly useful for image resizing, obtaining perceptible resolution losses only at 3x zoom at 1/8th of the original size!

    That made me curious about what kind of compression algorithm the software uses, how generic it is (I have seen that you are trying to apply it to videos too, can't wait!), and what are your current thoughts on the development of the software.

    Thanks again.

    opened by trenta3 0
  • thread 'main' panicked at 'assertion failed: picture.uv_stride as u32 == width / 2'

    thread 'main' panicked at 'assertion failed: picture.uv_stride as u32 == width / 2'

    Sometimes I get the following error message when batch compressing jpg files:

    thread 'main' panicked at 'assertion failed: picture.uv_stride as u32 == width / 2', ~/.cargo/registry/src/github.com-1ecc6299db9ec823/imager-0.3.2/src/data.rs:276:9
    
    opened by mrusme 3
  • thread 'main' panicked at 'open input file path: ()'

    thread 'main' panicked at 'open input file path: ()'

    Sometimes I get the following error message when batch compressing files:

    thread 'main' panicked at 'open input file path: ()', ~/.cargo/registry/src/github.com-1ecc6299db9ec823/imager-0.3.2/src/main.rs:150:73
    

    I assume it's due to a wrong file type or something.

    opened by mrusme 0
  • feat: update dependencies due to vulnerabilities

    feat: update dependencies due to vulnerabilities

    Hey man,

    Awesome tool. Tried it out locally and noticed some vulnerabilities and unpinned libraries. For security purposes, I pinned some of them and updated the docker image.

    If you plan to keep that thing up to date (which would be awesome) I would recommend to add dependabot or something like it.

    There are a f**** ton of lines updated due to cargo fmt. The main changes are the Cargo.toml files, the Dockerfile and the two imports of image::FileType moved to image::imageops::FileType and image::ConvertBuffer moved to image::buffer::ConvertBuffer

    Do you plan to publish the docker image yourself?

    opened by somehowchris 0
  • Failure to build on Linux

    Failure to build on Linux

    I came across your imager project on GitHub while looking at various image compression software. I was able to download and run it on Ubuntu, and it does a fantastic job on compression. Well done on developing this awesome utility!

    I am now trying to compile it for a Raspberry Pi but am running into some errors.

    I followed the steps in the 'install.md' file in the project:

    • curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    • apt-get install -y build-essential llvm-dev libclang-dev clang openssl pkg-config libssl-dev xz-utils
    • git clone https://github.com/imager-io/imager.git && cd imager
    • cargo install --path imager --force

    If I run the compile with the --verbose option I get the following output:

    Running `rustc --crate-name webp_dev --edition=2018 /home/pi/.cargo/registry/src/github.com-1285ae84e5963aae/webp-dev-0.4.1/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -Cembed-bitcode=no --cfg 'feature="default"' -C metadata=0d370911ed82618f -C extra-filename=-0d370911ed82618f --out-dir /tmp/cargo-installKBNy5i/release/deps -L dependency=/tmp/cargo-installKBNy5i/release/deps --extern image=/tmp/cargo-installKBNy5i/release/deps/libimage-a4bacbab917eac6b.rmeta --extern libc=/tmp/cargo-installKBNy5i/release/deps/liblibc-5103d3a8c700d90d.rmeta --cap-lints allow -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out/webmproject-libwebp-8bac456/src -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out/webmproject-libwebp-8bac456/src/demux -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out -l static=webp -l static=webpdemux -l static=cbits`
    error: could not find native static library `webp`, perhaps an -L flag is missing?
    
    error: aborting due to previous error
    
    error: could not compile `webp-dev`.
    
    Caused by:
      process didn't exit successfully: `rustc --crate-name webp_dev --edition=2018 /home/pi/.cargo/registry/src/github.com-1285ae84e5963aae/webp-dev-0.4.1/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -Cembed-bitcode=no --cfg 'feature="default"' -C metadata=0d370911ed82618f -C extra-filename=-0d370911ed82618f --out-dir /tmp/cargo-installKBNy5i/release/deps -L dependency=/tmp/cargo-installKBNy5i/release/deps --extern image=/tmp/cargo-installKBNy5i/release/deps/libimage-a4bacbab917eac6b.rmeta --extern libc=/tmp/cargo-installKBNy5i/release/deps/liblibc-5103d3a8c700d90d.rmeta --cap-lints allow -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out/webmproject-libwebp-8bac456/src -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out/webmproject-libwebp-8bac456/src/demux -L native=/tmp/cargo-installKBNy5i/release/build/webp-dev-cd4262d980e28f83/out -l static=webp -l static=webpdemux -l static=cbits` (exit code: 1)
    

    This error happens on the Raspberry Pi and Ubuntu (WSL)

    Some system information for the PI

    pi@raspberrypi:~ $ lsb_release -a
    No LSB modules are available.
    Distributor ID: Raspbian
    Description:    Raspbian GNU/Linux 10 (buster)
    Release:        10
    Codename:       buster
    
    pi@raspberrypi:~ $ uname -a
    Linux raspberrypi 4.19.93-v7+ #1290 SMP Fri Jan 10 16:39:50 GMT 2020 armv7l GNU/Linux
    

    Some system information for Ubuntu (WSL)

    user@laptop:~$ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 20.04.1 LTS
    Release:        20.04
    Codename:       focal
    
    user@laptop:~$ uname -a
    Linux laptop 4.19.104-microsoft-standard #1 SMP Wed Feb 19 06:37:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
    

    Any advice on how to fix this?

    opened by InventoryTech 6
Releases(auto-release/imager/0.3.4)
Owner
Imager IO
Site performance tools for efficiently distributing media on the web. Everything is free and open source, with absolutely no SAAS lock-ins or vendors.
Imager IO
Image Compression Algorithm

Image Compression Algorithm ?? A new lossless image compression algorithm. In the newest version the algorithm performs rather good, but manages to su

Hannes 31 May 10, 2022
A Rust encoder/decoder for Dominic Szablewski's QOI format for fast, lossless image compression.

QOI - The “Quite OK Image” format This is a Rust encoder and decoder for Dominic Szablewski's QOI format for fast, lossless image compression. See the

Chevy Ray Johnston 62 Nov 29, 2022
tai (Terminal Ascii Image) tool to convert images to ascii written in Rust

TAI Terminal Ascii Image A tool to convert images to ascii art written in Rust ?? Notes This tool is still in development stage. Contributions All Con

Mustafa Salih 258 Dec 5, 2022
Lust is a static image server designed to automatically convert uploaded image to several formats and preset sizes

What is Lust? Lust is a static image server designed to automatically convert uploaded image to several formats and preset sizes with scaling in mind.

Harrison Burt 242 Dec 22, 2022
Rust Lean Image Viewer - Fast and configurable image viewer inspired by JPEGView by David Kleiner

Rust Lean Image Viewer - Fast and configurable image viewer inspired by JPEGView by David Kleiner

3top1a 4 Apr 9, 2022
Oxipng - a multithreaded lossless PNG compression optimizer

Oxipng Overview Oxipng is a multithreaded lossless PNG compression optimizer. It can be used via a command-line interface or as a library in other Rus

Josh Holmer 1.8k Dec 28, 2022
Web-app that simulates different types of color blindness from a user-provided input image.

What is Dalted? Web-app that simulates different types of color blindness from a user-provided input image. Resources The color blindness simulation i

Jorge Carrasco 18 Dec 20, 2022
A Rust library for calculating perceptual hash values of images

img_hash Now builds on stable Rust! (But needs nightly to bench.) A library for getting perceptual hash values of images. Thanks to Dr. Neal Krawetz f

Austin Bonander 264 Dec 9, 2022
Encoding and decoding images in Rust

Image Maintainers: @HeroicKatora, @fintelia How to contribute An Image Processing Library This crate provides basic image processing functions and met

image-rs 3.5k Jan 9, 2023
Zero dependency images (of chaos) in Rust

bifurcate-rs Zero dependency images (of chaos) in Rust To run: time cargo run --release > img.pgm To convert from PGM to PNG using Image Magick: conve

Stephen Merity 32 Nov 17, 2021
Converts images into textual line art.

img2utf Transform images to textual line art! Images require pre-processing to come out nice. It's expected that users will do the following: Apply ga

Lee 149 Dec 10, 2022
Convert Sketchbook Tiff Files to Open Raster Images

SketchbookTiffConverter Convert Sketchbook Tiff Files to Open Raster Images and retain layer information. This is a command line program that will con

Phil Spindler 3 Nov 2, 2021
Fetch original quality URLs for images posted to a Twitter account

twitter-images Fetches the last tweets of a given account, then prints original quality URLs for all image tweets. Useful for archiving image content

Harsh Shandilya 6 Dec 23, 2022
Simple CLI program to generate zoomable tiled images

zoomtiler Simple CLI program to generate deepzoom zoomable tiled images. The input can either be a single image or multiple images of the same height,

Matthieu Pizenberg 3 Mar 14, 2022
Encoding and decoding images in Rust

Image Maintainers: @HeroicKatora, @fintelia How to contribute An Image Processing Library This crate provides basic image processing functions and met

image-rs 3.5k Jan 2, 2023
CLI and utilities for converting media files (images/videos) to ascii outputs (output media file or print to console)

CLI and utilities for converting media files (images/videos) to ascii outputs (output media file or print to console). Supports most standard image formats, and some video formats.

Michael 30 Jan 1, 2023
Image processing operations

imageproc An image processing library, based on the image library. There may initially be overlap between the functions in this library and those in i

image-rs 512 Jan 8, 2023
Artsy pixel image to vector graphics converter

inkdrop inkdrop is an artsy bitmap to vector converter. Command line interface The CLI binary is called inkdrop-cli and reads almost any image bitmap

Matthias Vogelgesang 62 Dec 26, 2022
Open Graphic Image Writer

Open Graphic Image Writer Documentation You can generate Open Graphic Image dynamically. A CSS-like API. You can generate image by using template imag

keiya sasaki 46 Dec 15, 2022