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