如何在imagemagick中剪出一个矩形(即设置为透明)?

问题描述 投票:0回答:3

我将三个文件(第二个和第三个有一些透明区域)合并为一个,效果很好:

convert image1.png image2.png image3.png -flatten image_combined.png

除了组合这些图片之外,我还想在 image1.png 的中间切出一个矩形,使该区域保持透明,但无法做到。 我在论坛上找到的一个(旧)例子是:

convert image1.png -alpha set -region 40x30+15+5 -alpha transparent image2.png

当我尝试它时(按原样,甚至没有尝试将其与我之前提到的代码混合),它根本不起作用,输出 image2.pngimage1.png 相同(更新:我是使用 ImageMagick v7)

如有任何帮助,我们将不胜感激,

迈克尔

imagemagick transparency alpha-transparency
3个回答
3
投票

这是马克答案的替代方案。 (他的答案仅适用于 ImageMagick 7)。

请注意,您无法绘制透明度。您只能对某些区域进行洪水填充,以用透明度替换颜色。但这更复杂。

所以简单的答案是在白色背景中创建一个黑色正方形,并将该图像添加为 Alpha 通道。白色将使图像保持不透明,黑色将显示为透明。

convert -size 100x100 xc:red red.png 

convert red.png \
\( +clone -fill white -colorize 100 \
    -size 90x90 xc:black \
    -gravity center -composite \) \
-alpha off -compose copy_opacity -composite \
result.png 

以上是 ImageMagick 6 的 Unix 语法。对于 Windows,删除括号中的 \ 并将行尾 \ 更改为 ^。

对于 ImageMagick 7,将

convert
替换为
magick

如果您的输入图像已经具有透明度,那么您必须提取其 Alpha 通道并将其与矩形图像组合。然后用新的组合 Alpha 通道替换输入的 Alpha 通道。


2
投票

不知道为什么我找不到一种简单的方法来做到这一点,但以下方法甚至适用于洋红色图像:

magick  xc:red[100x100\!]  \( +clone -threshold 0  -draw "rectangle 10,10 90,90" \) -channel-fx '| gray=>alpha' result.png


第一部分与:

没有什么不同
magick -size 100x100 xc:red ...

括号内的部分构成 Alpha 通道。它使用

+clone
来实现这一点,它会复制原始图像 - 大小基本相同,但不需要知道大小,因此它适用于任何图像大小。
-threshold 0
使亮度为零或以上的每个像素都变成白色 - 这意味着实际上 所有 像素都变成白色。然后,我使用
-draw "rectangle x0,y0 x1,y1"
绘制您想要在图像中打孔的 “洞”。由于默认绘制颜色为黑色,因此括号内所有内容的最终结果是您将在白色背景上得到一个黑色矩形。这将成为下一步的 Alpha 通道。

括号后面的部分将 Alpha 通道强制进入原始的红色图像,使其在 Alpha 通道为黑色时透明,在 Alpha 通道为白色时不透明。


我不知道为什么以下不起作用:

magick ... \( ... \) -compose copy-alpha -composite result.png

如果您想查看保存为名为

"alpha.png"
的文件的 Alpha 通道,您可以使用:

magick  xc:red[100x100\!]  \( +clone -threshold 0  -draw "rectangle 10,10 90,90" -write alpha.png \) -channel-fx '| gray=>alpha' result.png

0
投票

考虑下面的彩色图像。编写一个程序来设置最暗矩形的透明度 显示在图像中间。在输出图像中,中心矩形不会出现,而 其余的都会一样。 (03)

© www.soinside.com 2019 - 2024. All rights reserved.