【问题标题】:Can ImageMagick be prevented from overwriting an existing image?可以防止 ImageMagick 覆盖现有图像吗?
【发布时间】:2018-12-30 21:39:17
【问题描述】:

convert图像时,ImageMagick 的默认行为似乎是覆盖任何现有文件。有可能防止这种情况吗?我正在寻找类似于 Wget 的 --no-clobber download option 的东西。我已经通过ImageMagick's list of command-line options,我能找到的最接近的选项是-update,但这只能检测输入文件是否被更改。

这是我想要完成的一个示例:在第一次运行时,convert input.jpg output.png 产生一个 已经存在的 output.png,然后在第二次运行时,@987654331 @ 检测到 output.png已经存在并且不会覆盖它。

【问题讨论】:

  • 这就像来自 Unix 世界的大多数程序一样——它假设你知道你在做什么。它更像是一种 Windows 方法来询问您是否真的是在输入您输入的内容。我想这只是一种不同的精神。
  • 如果文件存在与否,您可以编写测试脚本,然后根据需要进行转换。例如,这在 Unix bash 中很容易。见shellhacks.com/bash-test-if-file-exists

标签: imagemagick imagemagick-convert


【解决方案1】:

先测试它是否存在,假设bash

[ ! -f output.png ] && convert input.png output.png

或者稍微不那么直观,但更短:

[ -f output.png ] || convert input.png output.png

【讨论】:

    【解决方案2】:

    这样的事情能解决你的问题吗?

    它将写入output.png,但如果文件已经存在,则会创建一个带有随机 5 个字符后缀的新文件(例如,output-CKYnY.png 然后output-hSYZC.png 等)。

    convert input.jpg -resize 50% $(if test -f output.png; then echo "output-$(head -c5 /dev/urandom | base64 | tr -dc 'A-Za-z0-9' | head -c5).png"; else echo "output.png"; fi)
    

    【讨论】:

    • 要生成一个随机名称,您可以使用mktemp output-XXXXX.png 而不是/dev/urandom。这更容易,并且还检查随机名称是否未使用。
    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 2019-01-20
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多