繁体   English   中英

mozcjpeg - 优化原始图像

[英]mozcjpeg - optimize original image

我正在尝试使用 mozcjpeg 优化 sample.jpg,但我希望它压缩 sample.jpg,而不是创建另一个文件。

我运行这个命令:

mozcjpeg -quality 80 sample.jpg > sample.jpg

我得到

Empty input file

正确的做法是什么?

PS 我有一个每天运行一次的 bash 脚本来优化过去 24 小时内创建的图像。

只需使用不同的输出文件名,否则它会立即被覆盖。

您正在读取文件并同时覆盖它。 相反,制作一个中间文件:

tmp_file="$(mktemp)"
mozcjpeg -quality 80 sample.jpg > "${tmp_file}"
mv "${tmp_file}" sample.jpg

anycmd foo.jpg > foo.jpg理解为:

  • shell 将打开foo.jpg进行写入(覆盖任何现有数据)。
  • shell 将 fork 并将这个打开的文件设置为 stdout。
  • shell 将执行anycmd foo.jpg

因此,在执行命令时,原始文件已经消失了。 你怎么能解决这个问题?

好吧,您可以按照其他答案中的建议创建一个临时文件。

或者,您可以使用sponge 它是moreutils包的一部分。

$ whatis sponge
sponge (1)           - soak up standard input and write to a file

该工具允许您编写:

mozcjpeg -quality 80 sample.jpg | sponge sample.jpg

它起作用是因为sponge将首先读取所有标准输入(在内存中),并且只有在标准输入到达 EOF 后才会打开文件进行写入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM