如何在 imagemagick 中切出一个矩形(即设置为透明)?
How to cut out a rectangle (i.e. set it transparent) in imagemagick?
我将三个文件(第二个和第三个具有一些透明区域)合并为一个,效果很好:
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.png 与 image1.png 相同(更新:我使用的是 ImageMagick v7)
如有任何帮助,我们将不胜感激,
迈克尔
不知道为什么我找不到简单的方法来执行此操作,但以下方法甚至适用于洋红色图像:
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
这里是 Mark 答案的替代答案。 (他的回答只适用于 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 通道。
我将三个文件(第二个和第三个具有一些透明区域)合并为一个,效果很好:
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.png 与 image1.png 相同(更新:我使用的是 ImageMagick v7)
如有任何帮助,我们将不胜感激,
迈克尔
不知道为什么我找不到简单的方法来执行此操作,但以下方法甚至适用于洋红色图像:
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
这里是 Mark 答案的替代答案。 (他的回答只适用于 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 通道。