Skip to main content

A multi format lossless image optimizer that uses external tools

Project description

picopt

A multi-format, recursive, multiprocessor aware, command line, lossless image optimizer utility that can use external tools for even better optimizing.

Picopt will optionally drop hidden timestamps at the root of your image directories to avoid reoptimizing images picopt has already optimized.

💭 Conversion Philosophy

Warning

Picopt transforms images in place and throws out the old image. Always have a backup of images before running picopt in case you are not satisfied with the results.

Lossy Images

Converting lossy images rarely makes sense and so picopt only optimizes them in their current format.

  • JPEG images are optimized with MozJpeg's jpegtran.
  • WEBP Lossy images are not optimized. There is no current way to preserve information without running it through a lossy process again.

Lossless Images

Lossless WebP images are smaller than PNG, much smaller than GIF and, of course, a great deal smaller than uncompressed bitmaps like BMP. As such the best practice is probably to convert all lossless images to WebP Lossless as now all major browsers support it. The only downside is that decoding WebP Lossless takes on average 50% more CPU than PNG. All major desktop and mobile browsers support WEBP. WEBP is the lossless format of choice. Until perhaps JPEG XL support arrives for browsers.

Sequenced Images

Sequenced Images, like animated GIFs and WebP, most of the time, should be converted to a compressed video format like HEVC, VVC, VP9 or VP10. There are several situations where this is impractical and so Animated WebP is now a good substitute.

Conversion

By default, picopt does not convert images between formats. You must turn on conversion to PNG or WebP explicitly.

🖼️ Formats

  • By default picopt will optimize GIF, JPEG, PNG, and WEBP images.
  • Picopt can optionally optimize SVG images, ZIP, ePub, and CBZ containers.
  • Picopt can convert many lossless images such as BMP, CBR, CUR, DIB, FITS, GIF, IMT, PCX, PIXAR, PNG, PPM, PSD, QOI, SGI, SPIDER, SUN, TGA, TIFF, XBM, and XPM into PNG and WEBP.
  • Picopt can convert Animated GIF, TIFF, and FLI into Animated PNG or WebP files.
  • Picopt can convert Animated GIF, TIFF, FLI, and PNG into Animated WebP files.
  • Picopt can convert MPO to JPEG by stripping secondary images (often thumbnails created by cameras) if a primary image exists. (Experimental).
  • Picopt can convert RAR files into Zipfiles and CBR files into CBZ files.

Because picopt supports so many lossless image formats, to avoid surprises if you specify a conversion target, picopt will only convert GIF and PNG images to the target by default. To convert another format, like BMP, to WEBP you must specify that you want to read the BMP format and that you want to convert it to WEBP:

picopt -x BMP -c WEBP big_old.bmp

JPEG

To optimize JPEG images at all picopt needs one of mozjpeg or jpegtran on the path. in order of preference.

PNG & APNG

Picopt uses an internal oxipng python module to optimize PNG images and convert other lossless formats to PNG picopt. The external pngout tool can provide a small extra bit of compression.

Animated PNGs are optimized with the internal optimizer.

Animated GIF

Gifs and Animated GIFs are optimized with gifsicle if available. or interaallly if is not. Gifsicle only provides a small advantage over the internal optimizer.

WebP

WebP lossless formats are optimized with cwebp if available and with the internal optimizer if not. cwebp provides significant improvements over the internal optimizer.

SVG

Picopt can only optimize SVGs if svgo is on the path.

MPO (Experimental)

Picopt can extract the primary image from a multi JPEG MPO that also contains thumbnails and convert the file to an ordinary JPEG. Picopt will also optimize this image if it can. To enable this you must run with -x MPO -c JPEG Steroscopic MPOs should have no primary image tagged in the MPO directory and be unaffected.

This feature has not been tested with a large variety of MPOs and should be considered experimental.

EPub

EPub Books are zip files that often contain images and picopt unpacks and repacks this format natively. Images within the epub are handled by other programs. EPub optimization is not turned on by default. EPub contents are never converted to other formats because it would break internal references to them.

CBZ & CBR

Picopt uncompresses, optimizes and rezips comic book archive files. Be aware that CBR rar archives may only be rezipped into CBZs instead of CBR. Comic book archive optimization is not turned on by default to prevent surprises.

📦 Install

System Dependencies

Python

Picopt requires Python 3.10 or greater installed on whichever system you use.

Picopt is most effective with these binary dependencies installed. We must install these first

macOS

brew install gifsicle mozjpeg svgo webp

ln -s $(brew --prefix)/opt/mozjpeg/bin/jpegtran /usr/local/bin/mozjpeg

Debian / Ubuntu, Windows Linux Subsystem

apt-get install gifsicle python-imaging webp

if you don't want to install mozjpeg using the instructions below then use jpegtran:

apt-get install libjpeg-progs

See mozjepg, pngout & svgo install instructions below

Redhat / Fedora

dnf install gifsicle python3-pillow libwebp-tools

if you don't want to install mozjpeg using the instructions below then use jpegtran:

dnf install libjpeg-turbo-utils

See mozjepg, pngout & svgo install instructions below

Picopt python package

pip install picopt

⚙️ External Programs

Picopt will perform optimization on most lossless formats without using external programs, but much more compression is possible if these external programs are on your path.

mozjpeg

mozjpeg offers better compression than libjpeg-progs jpegtran. It may or may not be packaged for your *nix, but even when it is, picopt requires that its separately compiled version of jpegtran be symlinked to 'mozjpeg' somewhere in the path.

Instructions for installing on macOS are given above. Some near recent binaries for Windows and Debian x86 can be found here. Most Linux distributions still require a more manual installation as elucidated here on Casey Hoffer's blog

pngout

pngout is a compression tool that can be used for small extra compression. It does not run on 16 bit PNGs.

It can be installed on macOS with:

brew install jonof/kenutils/pngout

It is not packaged for linux, but you may find the latest binary version on JonoF's site. Picopt looks for the binary to be called pngout

svgo

svgo compresses SVGs. Svgo is packaged for homebrew, but picopt can also use it if it's installed with npm.

On Linux

To install svgo on Linux you can use the snap tool:

snap install svgo

Or you can install svgo with npm:

npm install -G svgo

⌨️ Usage Examples

Optimize all JPEG files in a directory:

picopt *.jpg

Optimize all files and recurse directories:

picopt -r *

Optimize files, recurse directories, also optimize ePub & CBZ containers, convert lossless images into WEBP, convert CBR into CBZ.

picopt -rx EPUB,CBR,CBZ -c WEBP,CBZ *

Optimize files and recurse directories AND optimize comic book archives:

picopt -rx CBZ *

Optimize comic directory recursively. Convert CBRs to CBZ. Convert lossless images, including TIFF, to lossless WEBP. Do not follow symlinks. Set timestamps.

picopt -rStc CBZ,WEBP -x TIFF,CBR,CBZ /Volumes/Media/Comics

Optimize all files, but only JPEG format files:

picopt -f JPEG *

Optimize files and containers, but not JPEGS:

picopt -f GIF,PNG,WEBP,ZIP,CBZ,EPUB *

Optimize files, but not animated gifs:

picopt -f PNG,WEBP,ZIP,CBZ,EPUB *

Just list files picopt.py would try to optimize:

picopt -L *

Optimize pictures in my iPhoto library, but only after the last time I did this, skipping symlinks to avoid duplicate work. Also drop a timestamp file so I don't have to remember the last time I did this:

picopt -rSt -D '2013 June 1 14:00' 'Pictures/iPhoto Library'

📦 Packages

👀 Alternatives

  • imagemin looks to be an all in one cli and gui solution with bundled libraries, so no awkward dependencies.

  • Imageoptim is an all-in-one OS X GUI image optimizer. Imageoptim command line usage is possible with an external program.

Project details


Release history Release notifications | RSS feed

This version

5.0.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

picopt-5.0.0.tar.gz (9.7 MB view details)

Uploaded Source

Built Distribution

picopt-5.0.0-py3-none-any.whl (60.0 kB view details)

Uploaded Python 3

File details

Details for the file picopt-5.0.0.tar.gz.

File metadata

  • Download URL: picopt-5.0.0.tar.gz
  • Upload date:
  • Size: 9.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.2

File hashes

Hashes for picopt-5.0.0.tar.gz
Algorithm Hash digest
SHA256 3fb3d030f1217bd4f00c085eb89bfded40f75c6d76ffe4361fa9585a22b025a8
MD5 8df42db05b33c168a2ab7ecdb9a93068
BLAKE2b-256 f48296e259971d38ea253dd86fe3bbab646836a75a42704917f757a5437503c9

See more details on using hashes here.

File details

Details for the file picopt-5.0.0-py3-none-any.whl.

File metadata

  • Download URL: picopt-5.0.0-py3-none-any.whl
  • Upload date:
  • Size: 60.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.2

File hashes

Hashes for picopt-5.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 722be511f919059396575d388038c470d9a0b1548b74928c26d370c5c08e7495
MD5 0fc4492de188a036148a382fd44aa749
BLAKE2b-256 9ffbd734bedfbf5cfeb8328c5ca30842612553be34e3b3c625f6d95e03dae456

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page