See also [[ImageProcessing]]. == JPEG == [[http://jpegclub.org/jpegtran/|jpegtran]] (part of libjpeg-progs in Debian) can losslessly optimize JPEG files: {{{#!highlight sh numbers=off parallel -u 'echo {}; jpegtran -optimize -progressive -perfect -copy all -outfile {}.tran {} && mv {}.tran {}' ::: *.jpg }}} Source: [[http://schnouki.net/2011/07/22/optimizing-jpeg-pictures/|/dev/schnouki - Optimizing JPEG pictures]] Another interesting tool is [[http://www.kokkonen.net/tjko/projects.html|jpegoptim]] ([[http://freshmeat.net/projects/jpegoptim/|jpegoptim on freshmeat]]): {{{#!highlight sh numbers=off parallel jpegoptim ::: *.jpg }}} though the compression does not appear to be as good, and it's known to wipe JPEG metadata even when told not to. Other useful stuff: {{{#!highlight sh numbers=off # mozjpeg parallel -u 'echo {}; cjpeg -outfile {}.mozjpeg -optimise -progressive -quality 90 {} && mv {}.mozjpeg {}' ::: *.jpg # 4:2:0 chroma subsambling parallel -u 'echo {}; convert {} -sampling-factor "2x2,1x1,1x1" {}.422 && mv {}.422 {}' ::: *.jpg }}} == PNG == === 256 color (8-bit) === Converting to 8-bit PNG (maximum of 256 colors) saves a significant amount of space, though this should be done BEFORE other optimization: {{{#!highlight sh numbers=off find . -name '*png' -print0 | xargs -0 -n64 -P$(nproc) pngnq -e .8 -n 256 find . -name '*.8' -exec echo mv '{}' '{}'.png \; | sed 's/\.8\./\./' }}} To take advantage of OS file caching, 8-bit conversion and PNG optimization can be wrapped into a script, optimize-png-8bit: {{{#!highlight sh #!/bin/sh for i in "$@"; do pngnq -e .png.8 -n 256 $i mv $i.8 $i done optipng -quiet -o3 $@ advpng -z -4 $@ advdef -z -4 $@ }}} which you can run in parallel with: {{{#!highlight sh numbers=off find . -name '*png' -print0 | xargs -0 -n64 -P$(nproc) optimize-png-8bit }}} === Full color === {{{#!highlight sh numbers=off find . -name '*png' -print0 | xargs -0 -n64 -P$(nproc) optipng -o3 find . -name '*png' -print0 | xargs -0 -n64 -P$(nproc) advpng -z -4 find . -name '*png' -print0 | xargs -0 -n64 -P$(nproc) advdef -z -4 # Or parallel -n 64 -u 'optipng -o3 {}; advpng -z -4 {}; advdef -z -4 {}' ::: *png }}} To take advantage of OS file caching, PNG optimization can be wrapped into a script, optimize-png: {{{#!highlight sh #!/bin/sh optipng -quiet -o3 $@ advpng -z -4 $@ advdef -z -4 $@ }}} which you can run in parallel with: {{{#!highlight sh numbers=off find . -name '*png' -print0 | xargs -0 -n64 -P$(nproc) optimize-png }}} pngcrush is another tool that unfortunately does not work as well as the above, but can be run in parallel with: {{{#!highlight sh numbers=off parallel -u 'echo {}; pngcrush -reduce -brute {} {}.pngcrush && mv {}.pngcrush {}' ::: *.png # Remove color space information parallel -u 'echo {}; pngcrush -reduce -brute -rem gAMA -rem cHRM -rem iCCP -rem sRGB {} {}.pngcrush && mv {}.pngcrush {}' ::: *.png }}} ---- CategoryCheatSheet