【问题标题】:mozcjpeg - optimize original imagemozcjpeg - 优化原始图像
【发布时间】:2017-04-25 11:58:14
【问题描述】:

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

我运行这个命令:

mozcjpeg -quality 80 sample.jpg > sample.jpg

我得到了

Empty input file

正确的做法是什么?

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

【问题讨论】:

    标签: bash mozjpeg


    【解决方案1】:

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

    【讨论】:

    • Vadim,我需要覆盖原始文件,这就是问题所在。 jpegtran 可以,所以我认为 mozjpeg 也可以。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      好吧,你可以创建一个临时文件,as suggested in the other answer

      或者,您可以使用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 后才会打开文件进行写入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-20
        • 2013-06-23
        • 2012-08-20
        • 1970-01-01
        • 2012-11-28
        • 1970-01-01
        • 2016-04-08
        • 2023-04-05
        相关资源
        最近更新 更多