如何让pngcrush覆盖原始文件?

Dis*_*oat 15 command-line png

我已经通读了man pngcrush,似乎没有办法粉碎 PNG 文件并将其保存在原始文件上。我想压缩几个文件夹的 PNG,所以用一个命令完成所有工作会很有用!

目前我正在做pngcrush -q -d tmp *.png然后手动将文件从tmp目录剪切粘贴到原始文件夹。所以我想使用mv可能是最好的方法?有什么更好的想法吗?

小智 27

从 1.7.22 版开始,pngcrush有一个覆盖选项。

尝试

pngcrush -ow file.png
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅更新日志

Version 1.7.22  (built with libpng-1.5.6 and zlib-1.2.5)
  Added "-ow" (overwrite) option.  The input file is overwritten and the
    output file is just used temporarily and removed after it is copied
    over the input file..  If you do not specify an output file, "pngout.png"
    is used as the temporary file. Caution: the temporary file must be on
    the same filesystem as the input file.  Contributed by a group of students
    of the University of Paris who were taking the "Understanding of Programs"
    course and wished to gain familiarity with an open-source program.
Run Code Online (Sandbox Code Playgroud)


fra*_*ous 17

全部在一行:

for file in *.png; do pngcrush "$file" "${file%.png}-crushed.png" && mv "${file%.png}-crushed.png" "$file"; done
Run Code Online (Sandbox Code Playgroud)

应该这样做。

(尽管到目前为止,在我自己的测试中,我测试的 png 中只有不到一半pngcrush在之后变小了,所以给我上色了。)

  • 使用 -brute 以获得更好的压缩。 (4认同)
  • [其他答案](http://askubuntu.com/a/497316/41229) 现在使用较新的 pngcrush 效果更好。 (2认同)