File indexing completed on 2024-11-17 05:08:36
0001 #!/bin/sh 0002 0003 # Copyright 2008 Urs Wolfer <uwolfer @ kde.org> 0004 # Copyright 2012, 2013 Bruno George Moraes <brunogm0 @ gmail.com> 0005 # 0006 # This program is free software; you can redistribute it and/or 0007 # modify it under the terms of the GNU General Public License as 0008 # published by the Free Software Foundation; either version 2 of 0009 # the License, or (at your option) any later version. 0010 # 0011 # This program is distributed in the hope that it will be useful, 0012 # but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0014 # GNU General Public License for more details. 0015 # 0016 # 0017 # Thin wrapper script around optipng, advdef and pngout. 0018 # It filters the output and shows a summary at the end of the optimization run. 0019 # Tested with: 0020 # * OptiPNG 0.7.1 http://optipng.sourceforge.net/ 0021 # * advdef (AdvanceCOMP) 1.15 http://advancemame.sourceforge.net/comp-readme.html 0022 # * PNGOUT http://www.jonof.id.au/kenutils (Note: no-cost download; non-Free software) 0023 0024 # ${foo:-bar} syntax sets foo=bar if not already set 0025 optipng_tool=$(command -v optipng) 0026 optipng_tool=${optipng_tool:-/bin/true} 0027 0028 advancecomp_tool=$(command -v advdef) 0029 advancecomp_tool=${advancecomp_tool:-/bin/true} 0030 0031 pngout_tool=$(command -v pngout) 0032 pngout_tool=${pngout_tool:-/bin/true} 0033 0034 thread_count=$(grep -c ^processor /proc/cpuinfo) 0035 thread_count=${thread_count:-4} 0036 0037 if test "$1" = "-h" -o "$1" = "--help"; then 0038 echo "Usage: optimizegraphics [FILE]"; 0039 echo "If [FILE] is not defined, it optimizes all files (PNG,MNG,SVGZ) recursively starting at the current working directory."; 0040 echo "To achieve the best optimization please use all supported tools (optipng,advdef,pngout)."; 0041 exit; 0042 fi 0043 0044 if [ ${optipng_tool} = "/bin/true" ]; then 0045 echo "Please install optipng to increase PNG compression."; 0046 fi 0047 if [ ${pngout_tool} = "/bin/true" ]; then 0048 echo "Please install pngout to increase PNG compression."; 0049 fi 0050 if [ ${advancecomp_tool} = "/bin/true" ]; then 0051 echo "Please install advancecomp to optimize PNG, MNG and SVGZ."; 0052 fi 0053 0054 if [ $# -ne 0 ]; then # file is defined 0055 if [ ! -e "$1" ]; then 0056 echo "File $1 doesn't exist!" 0057 exit 1 0058 fi 0059 0060 ${optipng_tool} -preserve -o6 "$1"; 0061 ${advancecomp_tool} -z -4 "$1"; 0062 ${pngout_tool} -ks "$1"; 0063 0064 exit $? 0065 0066 else # do it recursively 0067 echo "Recursive parallel optimization using detected tools."; 0068 STARTSIZE=`du -sb | awk '{ print $1 }'`; 0069 0070 # OptiPNG pass 0071 if [ "${optipng_tool}" != "/bin/true" ] ; then 0072 find . -name "*.png" -print0 | \ 0073 xargs -t0r -n 1 -P $thread_count \ 0074 "${optipng_tool}" -quiet -preserve -o6 0075 else 0076 echo "Skipping OptiPNG optimizations for PNG file type" 0077 fi 0078 0079 # AdvanceCOMP pass 0080 if [ "${advancecomp_tool}" != "/bin/true" ] ; then 0081 find . \( -name "*.svgz" -o -name '*.mng' -o -name '*.png' \) -print0 | \ 0082 xargs -t0r -n 1 -P $thread_count \ 0083 "${advancecomp_tool}" -q -z -4 0084 else 0085 echo "Skipping AdvanceCOMP optimizations for SVGZ, MNG, PNG file types" 0086 fi 0087 0088 # PNGout pass 0089 if [ "${pngout_tool}" != "/bin/true" ] ; then 0090 find . -name "*.png" -print0 | \ 0091 xargs -t0r -n 1 -P $thread_count \ 0092 "${pngout_tool}" -q -ks 0093 else 0094 echo "Skipping PNGout optimizations for PNG file type" 0095 fi 0096 0097 ENDSIZE=`du -sb | awk '{ print $1 }'`; 0098 0099 REDUCEDSIZE=$(( $STARTSIZE - $ENDSIZE )); 0100 REDUCEDPER=$(( 100 * $REDUCEDSIZE / $STARTSIZE )); 0101 0102 echo "optimizegraphics: Losslessly optimized PNG, MNG, and SVGZ files."; 0103 echo "Went from $STARTSIZE to $ENDSIZE bytes" 0104 echo "Reduced " $REDUCEDPER" % disk space:" $REDUCEDSIZE" Bytes, " \ 0105 $(( $REDUCEDSIZE / 1024 )) "KiB, " $(( $REDUCEDSIZE / 1024 / 1024 )) "MiB"; 0106 fi