mozcjpeg-优化原始图像



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

我运行此命令:

mozcjpeg -quality 80 sample.jpg > sample.jpg

我得到

Empty input file

正确的方法是什么?

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

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

您正在阅读文件并同时覆盖文件。而是制作一个中间文件:

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

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

  • 外壳将打开foo.jpg进行写(覆盖任何现有数据(。
  • 外壳将分叉并将此打开文件设置为stdout。
  • 外壳将执行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将首先读取所有stdin(在内存中(,并且只有在stdin到达eof之后,它才能打开撰写文件。

相关内容

  • 没有找到相关文章

最新更新