Linux系统下如何使用 OptiPNG、jpegoptim 对图片进行无损压缩

smally是我在Github上尝试的第1个开源小项目。最近花了点时间,将其整体重构,并做了大量简化,正好重新写一篇介绍。

smally项目地址:https://github.com/xinlin-z/smally

smally提供的无损压缩,是通过调用著名的jpegtranoptipnggifsicle实现的,smally只是提供了一个可以批量处理很多文件的机制。

汲取了一些教训,现在smally的版本,使用file命令来判别文件类型。

为了简化,遍历目录树的功能也砍掉了,使用强大的find命令,各种查询条件直接就有了。

图片文件压缩之后,文件名和mtime都保持不变。

JPEG压缩

JPEG图片有baseline和progressive两种格式,smally会尝试比较源文件的这两个格式,选择size小的。如果size一样,选择progressive格式。

PNG压缩

直接使用optipng的最疯狂的-o7 -zm1-9 level压缩,耗时比较长,但能够得到最好的压缩效果。

GIF压缩

直接使用gifsicle的-O3 --colors 256压缩。

安装工具

Fedora

$ sudo dnf install libjpeg-turbo-utils optipng gifsicle

Ubuntu

$ sudo apt install libjpeg-turbo-progs optipng gifsicle

编译安装

$ sudo bash _install_tools.sh JPEG
$ sudo bash _install_tools.sh PNG
$ sudo bash _install_tools.sh GIF
$ # or all in one command
$ sudo bash _install_tools.sh JPEG PNG GIF

用sudo运行_install_tools.sh脚本,带上参数(如上),可以自动将最新版的jpegtran,optipng和gifsicle,通过编译的方式安装,并将symbolic link设置到/usr/bin下。注意:/usr/bin目录下原来的同名文件将会被删除。

为了安装顺利完成,你可能需要:

$ sudo dnf install gcc make autoconf automake

测试

$ bash test.sh

使用

一般压缩某个文件夹下所有的图片文件:

$ find <path/to/image_folder> -type f -exec bash smally.sh {} ;

也可以分类型:

$ # only jpeg
$ find <path/to/image_folder> -type f -exec bash smally.sh -t JPEG {} ;
$ # only png
$ find <path/to/image_folder> -type f -exec bash smally.sh -t PNG {} ;
$ # only gif
$ find <path/to/image_folder> -type f -exec bash smally.sh -t GIF {} ;

推荐find命令与xargs命令配合,充分利用多核CPU的性能。

下面示例中,-P4表示同时运行4个进程:

$ find <pathname> -type f -print0 | xargs -0 -P4 -I{} bash smally.sh {}

压缩单个图片:

$ python3 smally.py --jpegtran <jpeg_file>
$ python3 smally.py --optipng <png_file>
$ python3 smally.py --gifsicle <gif_file>

压缩单个你不知道格式的文件:

$ bash smally.sh <filename>

运行截屏

smally

原创文章,作者:中国IPv6网,如若转载,请注明出处:https://www.ipv6s.com/basis/application/202303103179.html

(0)
中国IPv6网的头像中国IPv6网
上一篇 2023年2月26日 下午10:32
下一篇 2023年3月15日 下午12:28

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注