Pngquant-在Linux上压缩PNG图像的命令行实用程序
Pngquant是一种免费,开放源代码和跨平台命令行有损PNG压缩程序。
它基于可移植的libimagequant库,用C99编写。
它通过将PNG图像转换为更有效的8位PNG格式来显着减小文件大小,并保留完整的alpha透明度。
我们可能已经知道,8位PNG文件通常比24/32位PNG文件小60-80%。
使用Pngquant压缩的图像与所有Web浏览器和操作系统完全兼容。
Pngquant可以一次压缩一个或者多个图像。
在本教程中,让我们看看如何在Linux上使用Pngquant安装Pngquant以及如何压缩PNG图像。
特点
Pngquant具有以下功能。
- 支持多个PNG文件的批量转换。
- 高质量的调色板生成。
- 它使用Median Cut量化算法来优化图像。
- 可以轻松地与Shell脚本,GUI和服务器端软件集成。
- 以所需的质量转换图像,并跳过无法以所需的质量转换的图像。
- 多核支持和英特尔SSE优化。
在Linux中安装Pngquant
可以以多种方式安装Pngquant。
从发行版的存储库安装Pngquant
大多数Linux发行版的默认存储库中都提供Pngquant。
在Arch Linux及其变体上,可以在[Community]存储库中使用Pngquant。
启用社区存储库并使用Pacman进行安装,如下所示。
$sudo pacman -S pngquant
在Debian,Ubuntu和Linux Mint上:
$sudo apt install pngquant
在Ubuntu系统上,我们需要启用[Universe]存储库以安装Pngquant。
要启用Universe存储库,请执行以下操作:
$sudo add-apt-repository universe
在Fedora上:
$sudo dnf install pngquant
在openSUSE上:
$sudo zypper install pngquant
在CentOS上:
$sudo yum install epel-release
$sudo yum install pngquant
检查已安装的Pngquant版本:
$pngquant -V 2.5.0 (June 2014)
默认存储库中可用的Pngquant版本可能较旧。
如果需要最新版本,请从下面的源代码进行编译并手动安装。
从源代码安装Pngquant
首先,安装安装必要的依赖项。
在Debian,Ubuntu上:
$sudo apt install git gcc cmake libpng-dev pkg-config
在CentOS上,Fedora:
$sudo yum install git libpng-devel gcc cmake
接下来,git clone最新版本的Pngquant:
$git clone --recursive https://github.com/kornelski/pngquant.git
上面的命令将下载Pngquant GitHub存储库的内容,并将其保存在当前工作目录中名为“ pngquant”的文件夹中。
切换到“ pngquant”目录:
$cd pngquant
最后,运行以下命令来编译并安装Pngquant:
$make
$sudo make install
默认情况下,Pngquant将安装在/usr/local/bin位置。
如果要将其安装在另一个目录中,请运行:
$./configure --prefix=dir && make
将“ dir”替换为路径。
我们需要先运行此命令,然后再运行“ sudo make install”命令。
检查Pngquant版本:
$pngquant -V 2.12.5 (July 2019)
看到了吗?
这是最新版本。
使用Cargo安装Pngquant
也可以使用Cargo Package Manager安装Pngquant。
首先,按照以下链接中的说明安装Rust。
- 在Linux中安装Rust编程语言
git clone最新版本的Pngquant:
$git clone --recursive https://github.com/kornelski/pngquant.git
最后,如下所示使用Cargo构建并安装Pngquant。
$cd pngquant
$sudo cargo build --release
有关其他安装方法,请参阅Pngquant官方安装页面。
使用Pngquant在Linux上压缩PNG图像
Pngquant用法很简单,不需要任何特殊技能即可使用。
我的当前目录中有一个名为“ theitroad.png”的PNG图像文件。
让我告诉你它的大小。
$du -sh theitroad.png 152K theitroad.png
如我们所见,图像大小为152k。
压缩PNG图像
要使用Pngquant压缩PNG图片,只需提供其路径,如下所示:
$pngquant theitroad.png
上面的命令将压缩theitroad.png文件,并将其另存为名为“ theitroad-fs8.png”的新文件。
默认情况下,Pngquant将使用与输入文件名相同的输出文件名,后缀为-or8.png或者-fs8.png。
意味着它不会覆盖源文件。
如果我们对压缩率不满意,只需删除压缩文件并保留原始文件即可。
让我们再次检查压缩图像文件的大小:
$du -sh theitroad-fs8.png 48K theitroad-fs8.png
看到了吗?
Pngquant将152k大小的图片减少到了48k。
确实是一项好工作。
使用任何图像查看器打开图像并进行比较。
原始图像和压缩图像之间的质量差异不会太大。
两个图像看起来几乎一样!
压缩时显示状态信息
默认情况下,Pngquant不会在压缩图像时显示幕后发生的事情。
如果要查看状态消息,请使用以下命令:
$pngquant theitroad.png --verbose theitroad.png: conserving memory read 152KB file corrected image from gamma 2.2 to sRGB gamma made histogram...1854 colors found selecting colors...4% selecting colors...25% selecting colors...28% selecting colors...49% selecting colors...69% selecting colors...90% selecting colors...100% moving colormap towards local minimum eliminated opaque tRNS-chunk entries...61 entries transparent mapped image to new colors...MSE=0.055 (Q=99) writing 256-color image as theitroad-fs8.png No errors detected while quantizing 1 image.
现在,我们将看到压缩发生时的进度。
压缩多个PNG图像
Pngquant还可以转换多个图像。
以下命令将在当前工作目录中压缩picture1.png和picture2.png。
$pngquant picture1.png picture2.png
另外,我们可以将所有文件移动到目录中,并一次性压缩它们。
例如,要转换名为“/home/sk/images”的文件夹中的所有图像,请运行:
$pngquant /home/sk/images/*.png
更改输出文件名后缀
就像我已经说过的那样,输出文件名与输入名称相同,只是它以“ -fs8.png”,“-or8.png”结尾。
但是,我们可以根据需要更改后缀,如下所示。
$pngquant theitroad.png --ext linux.png
此命令将压缩theitroad.png文件,并将其另存为theitroadlinux.png。
如果压缩文件的大小大于原始文件,则跳过保存文件
如果转换后的文件大于源文件,压缩点是什么?
这种转换是不值得的,所以我们可以像下面这样跳过它。
$pngquant --skip-if-larger theitroad.png
上面的命令仅在转换后的文件小于原始文件的情况下才会保存。
将转换后的文件保存在其他路径中
默认情况下,Pngquant会将输入和输出图像文件保存在同一目录中。
如果要将输出文件保存在其他位置,则命令为:
$pngquant theitroad.png --output Documents/output.png
此命令将压缩theitroad.png并将其另存为Documents目录中的output.png。
以自定义质量压缩PNG图像
Pngquant尽可能压缩图像。
我们还可以手动设置图像的质量。
Pngquant允许我们使用最小和最大参数在0(最差)到100(完美)范围内设置图像质量。
下面的示例将最低图像质量设置为60,将最高图像质量设置为80。
$pngquant --quality=60-80 image.png
如果转换后的质量低于最低质量,将不会保存图像。
剥离图像元数据
图像元数据是有关法师的一组数据。
它包含有关图像的所有信息,例如图像格式,相机设置,DPI,图像的日期和时间,标题和注释,地理位置等等。
请参阅以下文章,以了解如何查看图像元数据。
- 如何在Linux上查看图像元数据
如果我们没有元数据,则可以使用pngquant如下所示将其删除。
$pngquant --strip image.png
有关更多详细信息,请参见手册页。
$man pngquant