最近在进行图片压缩时,发现使用GD库进行压缩效果还可以,但当压缩到目标大小时,画面有些模糊。后来搜索到了一个工具,名为jpegoptim,它展现了比GD库更好的图片压缩效果。以下是该工具的简介及使用方法。

jpegoptim 简介:

官方网站: https://github.com/tjko/jpegoptim
使用方法: https://www.kokkonen.net/tjko/src/man/jpegoptim.txt

基本使用方法:

jpegoptim [ 选项 ] [ 文件名 ]

jpegoptim 主要用于优化/压缩 JPEG 文件。它支持无损优化,基于 Huffman 表。除了“有损”压缩外,Huffman 表还可以指定图像质量的上限,以及生成指定大小的图片。

提供的选项包括:

-d<路径>, --dest=<路径>: 设置保存优化的备用目标目录文件(默认是覆盖原始文件)。注意,未更改的文件不会添加到目标目录中。

-f, --force: 强制优化,即使结果大于原始文件。

-h, --help: 显示简短的使用信息并退出。

-m<质量>, --max=<质量>: 设置最大图像质量因数,禁用无损优化。有效值范围为 0 到 100。在牺牲质量的基础上,将会得到一个更小的图片。

-n, --noaction: 不真正优化文件,只是打印结果。

-S<大小>, --size=<大小>: 尝试将文件优化到给定大小,禁用无损优化。目标大小以千字节为单位指定(1 - n)或原始文件大小的百分比(1% - 99%)。

-T, --threshold=: 如果压缩增益低于临界点,则保持文件不变(%)。有效值范围为 0 到 100。

-o, --overwrite: 即使目标文件存在,也会覆盖它(使用 -d 选项时)。

-p, --preserve: 保留文件修改时间。

-q, --quiet: 静音模式。

-t, --totals: 处理所有文件后打印总计。

-v, --verbose: 启用详细模式。

其他选项:

--all-normal: 强制所有输出文件为非渐进式。可用于控制与 --force 一起使用时,将所有输入文件转换为渐进式 JPEG 选项。

--all-progressive: 强制所有输出文件为渐进式。可以用来转换与 --force 一起使用时,所有输入文件均转换为非渐进式 JPEG。

--strip-all: 从输出文件中删除所有(注释和 Exif)标记。注意,默认情况下仅保留注释和 Exif 标记,其他内容均保留丢弃。

--strip-com: 从输出文件中去除注释 (COM) 标记。

--strip-exif: 从输出文件中去除 EXIF 标记。

--strip-iptc: 从输出文件中去除 IPTC 标记。

--strip-icc: 从输出文件中去除 ICC 配置文件。

注意事项: 在使用 --size 选项时,可能会出现 BUG,生成的文件并不总是完全符合预期的尺寸。解决方法是在同一文件上重新运行 jpegoptim,这通常会使文件更接近目标大小。

我是这么使用

exec("jpegoptim.exe --strip-all --all-progressive -m50 {$imagesFile} --dest={$outputFilePath}");
//删除exif,然后质量选择50,将处理完的图片输出到{$outputFilePath}路径里边。

我在使用 PHP 将图片上传后,通过运行 jpegoptim 工具进行处理,然后将优化后的图片反馈到页面上。
我也实际使用 GD 库对图片进行压缩,发现当 GD 压缩质量设置为 30 时,与 jpegoptim 压缩质量设置为 50 的,生成的文件大小相当,但jpegoptim 生成的图片质量更好。

有一个需要特别注意的问题是,jpegoptim 在生成优化后的图片时会创建类似 "jpegoptim-0-6877.1546188552.tmp" 的临时文件。然而,我遇到了一个BUG,即程序无法将这个临时文件重命名为 ".jpg" 后缀。我搜索cannot rename temp file出来的原因是在 PHP 中拼接目录时,我使用了以斜杠 "/" 的路径,而 jpegoptim 只能正确处理以反斜杠 "\" 的路径,这导致最后一步无法完成。

解决方法是在 PHP 中确保目录路径以反斜杠结尾,以便与 jpegoptim 兼容。

--- EOF ---
本文链接:
订阅本站:feed
声明:博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

标签: none

添加新评论