Linux/Unix命令批量优化和压缩PNG文件
时间:2020-01-09 10:42:19 来源:igfitidea点击:
如何压缩和优化亚马逊云帐户上的png镜像,以便节省Cloudfront CDN帐户上的带宽?
如何使用镜像压缩器对PNG文件进行无损压缩,而使用Red Hat Enterprise Linux bash shell却不会对批量镜像质量产生影响?
大型网站(例如Google/Yahoo/Amazon/Facebook等)建议并使用以下镜像格式:
- 建议将PNG文件格式用于
web
。 - 对于小尺寸图片,建议使用GIF文件格式。
- 建议将JPG文件格式用于"高分辨率照相风格"镜像。
- "请勿使用" BMP或者TIFF。
optipng
您需要使用一个名为optipng的工具。
它是一个PNG优化器,可以将镜像文件重新压缩为较小的大小,而不会丢失任何信息。
该程序还将外部格式(BMP,GIF,PNM和TIFF)转换为优化的PNG,并执行PNG完整性检查和更正。
该工具可以安装在由Unix或者Linux操作系统支持的任何服务器上。
安装
首先,打开EPEL repo并执行以下yum命令以安装optipng:
## ** first enable epel repo on centos 7 ** ## # yum install epel-release # yum install optipng
Debian和Ubuntu/Mint Linux用户执行以下apt-get命令进行安装:
$ sudo apt-get install optipng
如何使用optipng命令?
语法为:
optipng file optipng [options] file optipng [options] input.png
我的示例test.png图片:test.png原始文件
要显示png镜像的大小,类型和压缩信息,请执行:
$ pnginfo -t test.png
使用ls命令查看文件大小:
$ ls -lh test.png
输出示例:
-rw-r--r-- 1 Hyman Hyman 279K Nov 29 00:10 test.png
使用optipng优化程序,如下所示:
$ cp test.{png,bak} $ optipng test.png
文件大小减少了24.51%:
$ ls -lh test.png
输出示例:
-rw-r--r-- 1 Hyman Hyman 211K Nov 29 02:40 test.png
优化的test.png文件可确保在连接速度较慢的用户中加载速度更快。
在网络带宽和存储方面,每个镜像视图还将节省24.51%的字节。
根据Google的说法:
对于任何可以减少25个字节或者更多字节的镜像文件,您都应该看到一个好处(少于这个数目将不会导致任何明显的性能提升)。
如何批量优化文件?
使用bash进行循环,如下所示:
#!/bin/bash cd /path/to/png/storage/2010/01/c/ mkdir optimized ## store optimized images in optimized directory ## ## Keep file system permission and make a backup of original PNG (see options below) ## for i in *.png; do optipng -o5 -quiet -keep -preserve -dir optimized -log optipng.log "$i"; done
您需要对代码进行更改。
例如,用于优化url的url路径如下:
http://s0.theitroad.org/foo/bar/optimized/test.png
或者,您可以覆盖现有的PNG镜像:
#!/bin/bash cd /path/to/png/storage/2010/01/c/ ## Overwrite images ## ## Keep file system permission and make a backup of original PNG (see options below) ## for i in *.png; do optipng -o5 -quiet -keep -preserve -log optipng.log "$i"; done
有关在所有子目录中处理* .png的说明
如下使用find命令(对所有镜像进行备份):
cd /var/www/html/uploads/ find . -type f -iname "*.png" -print0 | xargs -I {} -0 optipng -o5 -quiet -keep -preserve -log optipng.log "{}"
选项
General options: -fix enable error recovery -force enforce writing of a new output file -keep keep a backup of the modified files -preserve preserve file attributes if possible -quiet quiet mode -simulate simulation mode -snip cut one image out of multi-image or animation files -out <file> write output file to <file> -dir <directory> write output file(s) to <directory> -log <file> log messages to <file> -- stop option switch parsing Optimization options: -f <filters> PNG delta filters (0-5) default 0,5 -i <type> PNG interlace type (0-1) default <input> -zc <levels> zlib compression levels (1-9) default 9 -zm <levels> zlib memory levels (1-9) default 8 -zs <strategies> zlib compression strategies (0-3) default 0-3 -zw <window size> zlib window size (32k,16k,8k,4k,2k,1k,512,256) -full produce a full report on IDAT (might reduce speed) -nb no bit depth reduction -nc no color type reduction -np no palette reduction -nx no reductions -nz no IDAT recoding Optimization details: The optimization level presets -o0 <- -o1 -nx -nz -o1 <- [use the libpng heuristics] (1 trial) -o2 <- -zc9 -zm8 -zs0-3 -f0,5 (8 trials) -o3 <- -zc9 -zm8-9 -zs0-3 -f0,5 (16 trials) -o4 <- -zc9 -zm8 -zs0-3 -f0-5 (24 trials) -o5 <- -zc9 -zm8-9 -zs0-3 -f0-5 (48 trials) -o6 <- -zc1-9 -zm8 -zs0-3 -f0-5 (120 trials) -o7 <- -zc1-9 -zm8-9 -zs0-3 -f0-5 (240 trials) The libpng heuristics -o1 <- -zc9 -zm8 -zs0 -f0 (if PLTE is present) -o1 <- -zc9 -zm8 -zs1 -f5 (if PLTE is not present) The most exhaustive search (not generally recommended) [no preset] -zc1-9 -zm1-9 -zs0-3 -f0-5 (1080 trials) Examples: optipng file.png (default speed) optipng -o5 file.png (moderately slow) optipng -o7 file.png (very slow) optipng -i1 -o7 -v -full -sim experiment.png