Linux / Unix 命令用于批量优化和压缩 PNG 文件
教程详细信息 | |
---|---|
难度等级 | 中间的 |
Root 权限 | 是的 |
要求 | 選擇 |
预计阅读时间 | 7 分钟 |
- 建议在网络中使用 PNG 文件格式。
- 对于小尺寸图像,建议采用 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
Loaded plugins: auto-update-debuginfo, protectbase, rhnplugin 0 packages excluded due to repository protections Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package optipng.x86_64 0:0.6.4-1.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved =============================================================================== Package Arch Version Repository Size =============================================================================== Installing: optipng x86_64 0.6.4-1.el6 epel 82 k Transaction Summary =============================================================================== Install 1 Package(s) Total download size: 82 k Installed size: 181 k Is this ok [y/N]: y Downloading Packages: optipng-0.6.4-1.el6.x86_64.rpm | 82 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : optipng-0.6.4-1.el6.x86_64 1/1 Verifying : optipng-0.6.4-1.el6.x86_64 1/1 Installed: optipng.x86_64 0:0.6.4-1.el6 Complete!
Debian 和 Ubuntu/Mint Linux 用户输入以下apt-get 命令来安装:
$ sudo apt-get install optipng
Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: optipng 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 89.0 kB of archives. After this operation, 212 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main optipng amd64 0.6.4-1build1 [89.0 kB] Fetched 89.0 kB in 0s (419 kB/s) Selecting previously unselected package optipng. (Reading database ... 16090 files and directories currently installed.) Preparing to unpack .../optipng_0.6.4-1build1_amd64.deb ... Unpacking optipng (0.6.4-1build1) ... Setting up optipng (0.6.4-1build1) ...
如何使用 optipng 命令?
语法是:
optipng file optipng [options] file optipng [options] input.png
我的示例 eyagjdbwsyybsscshkggylbljkntrucf.png 图像:
eyagjdbwsyybsscshkggylbljkntrucf.png – 原始文件
$ pnginfo -t eyagjdbwsyybsscshkggylbljkntrucf.png
示例输出:
eyagjdbwsyybsscshkggylbljkntrucf.png (tiffinfo compatible labels)... Image Width: 1164 Image Length: 911 Bits/Sample: 8 Samples/Pixel: 3 Pixel Depth: 24 Colour Type (Photometric Interpretation): RGB Image filter: Single row per byte filter Interlacing: No interlacing Compression Scheme: Deflate method 8, 32k window Resolution: 0, 0 (unit unknown) FillOrder: msb-to-lsb Byte Order: Network (Big Endian) Number of text strings: 1 of 9 Software (xTXt deflate compressed): Shutter
使用 ls 命令查看文件大小:
$ ls -lh eyagjdbwsyybsscshkggylbljkntrucf.png
示例输出:
-rw-r--r-- 1 vivek vivek 279K Nov 29 00:10 eyagjdbwsyybsscshkggylbljkntrucf.png
使用 optipng 优化程序如下:
示例输出:
$ cp test.{png,bak}
$ optipng eyagjdbwsyybsscshkggylbljkntrucf.png
OptiPNG 0.6.4: Advanced PNG optimizer. Copyright (C) 2001-2010 Cosmin Truta. ** Processing: eyagjdbwsyybsscshkggylbljkntrucf.png 1164x911 pixels, 3x8 bits/pixel, RGB Input IDAT size = 284778 bytes Input file size = 285286 bytes Trying: zc = 9 zm = 8 zs = 0 f = 0 IDAT size = 215274 Selecting parameters: zc = 9 zm = 8 zs = 0 f = 0 IDAT size = 215274 Output IDAT size = 215274 bytes (69504 bytes decrease) Output file size = 215374 bytes (69912 bytes = 24.51% decrease)
文件大小减少了 24.51%:
$ ls -lh eyagjdbwsyybsscshkggylbljkntrucf.png
示例输出:
-rw-r--r-- 1 vivek vivek 211K Nov 29 02:40 eyagjdbwsyybsscshkggylbljkntrucf.png
您可以验证两幅图像的质量(单击放大):
优化后的 eyagjdbwsyybsscshkggylbljkntrucf.png 文件可确保在慢速连接下为用户提供更快的加载速度。它还将在网络带宽和存储方面节省每张图片 24.51% 的字节数。根据 Google 的说法:
对于任何可以减少 25 个字节或更多的图像文件,您应该会看到好处(少于这个数字不会带来任何明显的性能提升)。
如何批量优化文件?
#!/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.example.org/foo/bar/optimized/eyagjdbwsyybsscshkggylbljkntrucf.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
接下来,从您的 CDN 帐户中清除所有图像。有关更多信息,请参阅如何从云端清除旧图像/无效对象。
关于处理所有子目录中的 *.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
其他适用于 Linux / Unix 的 png 优化工具
Debian / Ubuntu Linux 和其他基于 *nix 的操作系统可以使用以下工具来实现相同目的:
- pngcrush — 优化 PNG(便携式网络图形)文件。
- pngnq – 用于优化 PNG(便携式网络图形)图像的工具。它是一种用于量化 RGBA 格式的 PNG 图像的工具。
- pngquant – PNG(便携式网络图形)图像优化实用程序。它是一个命令行实用程序,用于将 24/32 位 PNG 图像转换为调色板(8 位)PNG。
推荐阅读:
- PNG 优化指南。
- 访问optipng 主页以获取最新版本。
- 使用 PageSpeed 工具分析和优化您的网站。
- 6 种工具助您了解网站加载速度。