【问题标题】:combine two commands that swap white for black into one将两个将白色换成黑色的命令合二为一
【发布时间】:2017-07-18 20:17:07
【问题描述】:

我有大量带有透明背景的白色图像,我想让它们变成带有透明背景的黑色。使用 GIMP 或 BIMP 很简单,但是对于成千上万的图像,命令行似乎是一种更好的方法。 在 ImageMagick 中,我发现以下两个命令可以满足我的要求:

mogrify -alpha set -channel RGBA -background black -flatten +repage -negate *.png
mogrify -alpha set -channel RGBA -transparent white *.png

但是,我宁愿不通过两次。我尝试了多种不同的方式来组合它们:

mogrify -alpha set -channel RGBA -background black -flatten +repage -negate +repage -transparent white *.png

mogrify -alpha set -channel RGBA -background black -flatten +repage -negate -alpha set -channel RGBA -transparent white *.png

mogrify -alpha set -channel RGBA -background black -flatten +repage -negate +repage -alpha set -channel RGBA -transparent white *.png

以及相同想法的其他几种排列方式。所有这些都会导致纯黑色图像。我错过了什么?

有没有更简单的方法来反转黑白或至少将白色转换为黑色,但不影响 Alpha 层?

mogrify -negate *.png 

将白色转为透明,将透明转为白色,

mogrify -fill black -opaque white *.png

留下凌乱的白色边缘。

【问题讨论】:

  • 了解平台/操作系统可能会有所帮助,您的批处理文件标签建议使用 MS-DOS、OS/2 或 Windows
  • 请提供几个示例输入图像和相应的输出图像 - 单独提供,而不是拼接成单个图像。
  • 另外,您使用的是什么操作系统,两次通过的反对意见是什么?
  • windows 和数十万张图像要处理——从 8 小时缩短到 4 小时

标签: imagemagick batch-processing transparency mogrify


【解决方案1】:

在 ImageMagick 中你可以这样做:

mogrify -format png -fill "rgba(0,0,0,1)" -opaque "rgba(255,255,255,1)" *.png

如果你的白色不是完美的白色,那么添加 -fuzz XX%

mogrify -format png -fuzz 5% -fill "rgba(0,0,0,1)" -opaque "rgba(255,255,255,1)" *.png

问题是您需要在颜色中指定 alpha 值,因为您的图像具有透明度。因此使用 rgba(r,g,b,a) 值(注意 a)或使用带有#RRGGBBAA 的十六进制值

如果使用 IM 7,则 mogrify 将替换为 magick mogrify

这是一个使用转换的例子。我在徽标的其他地方创建了一个透明的白色图像:图像。

http://www.fmwconcepts.com/misc_tests/transparency_invert/logot.png

然后跑了

convert logot.png -fill "rgba(0,0,0,1)" -opaque "rgba(255,255,255,1)" logot_invert.png

在输入为白色的地方返回黑色并保持透明度不变。

http://www.fmwconcepts.com/misc_tests/transparency_invert/logot_invert.png

这不是你想要的吗?

【讨论】:

  • 即使有绒毛,它仍然和 -fill black -opaque white 一样。不是黑色的部分是白色的,我猜模糊百分比是由颜色距离决定的。有没有和 gimp 的 gimp-invert 一样的东西?
  • 我想我不明白这个问题。您能否发布示例图片并解释您想要发生的事情或显示使用 GIMP 的结果?
  • 继续:查看我对上面帖子的编辑示例。这不是你想要的吗?如果不是,请发布您的输入和 GIMP 输出。
  • Example 每列包含相同的图片,只是背景不同。我从第一个图像开始,并希望图像看起来像第二个,这是开头列出的两个命令所允许的。第 7 列和第 8 列是您的建议的结果。你明白我说的白边是什么意思吗?
  • 能否请您单独发布您的输入图像以及您想要的输出图像。我不能使用复合材料。它不保留透明度。我需要单独的文件。你的每一列代表什么?你想要的结果是什么?我不明白或看不到白边。我看不出你的结果(col 2)和我的结果(col 7)之间的区别
【解决方案2】:

也许您想要的是 ImageMagick 中的以下内容。只是猜测,直到我能看到你的实际输入文件。

mogrify -format png -alpha off -negate -alpha on *.png

【讨论】:

    【解决方案3】:

    在 ImageMagick 中,尝试

    mogrify -alpha off -negate -alpha on *.png
    

    这会关闭 Alpha 通道,反转黑白,然后打开原始 Alpha 通道。

    作为测试,我做了

    convert aircon.png -alpha off -negate -alpha on aircon_fred.png
    

    相当于你的两个 mogrify 命令是

    mogrify -background black -alpha background -alpha off -negate -transparent white *.png
    

    我不得不将您的 -flatten 替换为等效项,因为之后需要将 compose 方法重置为 over 以使 -transparent 正常工作。但是 mogrify 不接受 -compose over。

    作为一个简单的测试,我做了

    convert aircon.png -background black -flatten -negate -transparent white aircon_fred2.png
    

    另一种方法与第一种类似,只是将整个底层图像变黑并保持alpha通道。

    mogrify -alpha off -fill black -opaque white -alpha on *.png
    

    再次作为测试,我做了

    convert aircon.png -alpha off -fill black -opaque white -alpha on aircon_fred3.png
    

    但是,我的第一种方法应该可以提供更好的抗锯齿效果,因为它保留了原始 Alpha 通道。您的方法将通过 -transparent white 重新创建 alpha,并具有更多阶梯式混叠。

    【讨论】:

    • 这对我不起作用,但 mogrify -alpha deactivate -negate *.png 起作用
    • 您必须使用 ImageMagick 7 而不是 Imagemagic 6。如果是这样,请使用 magick mogrify -alpha deactivate -negate *.png
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多