为什么有些 ImageMagick 标志带有加号 (+) 而其他的带有减号 (-)?

Why do some ImageMagick flags have plus sign (+) and others minus (-)?

我没有看到使用 +- 有任何押韵或理由,而且我从未见过除 ImageMagick 套件之外的 Unix 命令(convert,等),它期望一些标志具有 +。 Win32 命令(以及它们到 Linux 的端口)有时使用 /,但从不使用 +.

我不知道这背后的背景,但个人觉得很合理。一般来说,正常形式就像其他 Linux 命令一样,前面有破折号或连字符:

magick INPUT -something OUTPUT

+形式用在有感的时候:

  • 否定,或者
  • 反方向,或
  • 重置、禁用或清除或
  • 作为 shorthand 形式。

这些概念可能有一些重叠,也可能存在其他附加概念。


所以,就“否定”而言

magick INPUT -fill red -opaque blue RESULT

会将所有蓝色像素变成红色,而此命令:

magick INPUT -fill red +opaque blue RESULT

会将所有 非蓝色 像素变为红色。

类似地,-adjoin 会尽可能将多个图像聚集到一个输出文件中,而 +adjoin 会强制多个单独的输出文件,即使它可能已经可以制作,比方说,多页 TIFF 或动画 GIF。

另一个示例是 -level 10%,90%,它将 增加 对比度,这样亮度范围的顶部和底部 10% 将被丢弃,剩余的 80% 将被拉伸到完整的、允许的亮度范围。另一方面,+level 10%,90% 将通过将整个可能的亮度范围压缩到可能亮度范围的中心 80% 来 降低 对比度。


根据“相反方向”,此命令将在第一个垂直下方附加图像:

magick INPUT INPUT INPUT -append TALL_RESULT

而以下肯定形式会将图像水平附加到右侧:

magick INPUT INPUT INPUT +append WIDE_RESULT

根据“重置、禁用或清除”,此命令将使用 Riemer 抖动:

magick INPUT -dither RiemerSMA ... RESULT

而以下肯定形式将禁用抖动:

magick INPUT +dither ... RESULT

如果您 select 对几个通道应用过滤器或阈值,您可以在之后重置回默认通道:

magick INPUT -channel alpha -threshold 50% +channel RESULT

如果您为某些操作设置了模糊,之后您可以将其重置为零:

magick INPUT -fill red -fuzz 10% -opaque blue +fuzz -opaque yellow RESULT

这会将填充颜色设置为红色,然后将蓝色 10% 范围内的所有像素变为红色,并将所有完全黄色的像素变为红色填充颜色。


shorthand方面,-swap 0,2将交换序列中的第一张和第三张图像,而+swap将交换序列中的最后两个,不管有多少。这是一个常见的操作,与传统的替代方案相比,加号形式简洁 -swap -1,-2

同样,-clone 2 将克隆序列中的第三个图像,而 +clone 将克隆最后一个……同样,这是一个非常常见的操作。将 +clone 与外观更传统但恕我直言更丑陋的替代方案 -clone -1

进行比较

同样,+delete 将删除序列中的最后一张图像。