这个问题:Use ImageMagick to place an image inside a larger canvas是我已经完成的事情,但是我想修改它以使新区域具有不同的颜色而不会使原始图像的透明部分变成相同的颜色
如何实现这一目标?
输入图片:
xxxxxxxx
xx...xxx
xxxxxxxx
输出图片:
xxxxxxxxiii
xx...xxxiii
xxxxxxxxiii
iiiiiiiiiii
x
)代表原始图片。.
)代表透明像素。i
)代表新画布的背景颜色。我认为我的命令是这样的:
dwidth = newWidth-origWidth
dheight = newHeight-origHeight
convert in.png -background yellow -splice (dwidth)x(height)+(origHeight)+(0) -splice (width)x(dheight)+(0)+(origHeight) out.png
括号仅为清晰起见。实际数字会显示而没有括号。
该代码实际崩溃了。由于某种原因,使用-gravity停止了崩溃。
使用ImageMagick 6.9.1-Q16
。
答案 0 :(得分:1)
我认为你让自己感到困惑,Kurt和我说你想把你的新形象"放在更大的画布里#34; 当你真的不想要影响现有画布(即透明区域必须保持透明)。我想,你想要做的是从你的图表中添加一些围绕现有画布的新画布 - 如果是这种情况,你需要-splice
来添加画布而不是-composite
来覆盖现有的一个。
所以,如果你从这个带透明中心的空心绿色矩形开始:
你实际上想要在它周围拼接(添加)一些额外的画布,而不会影响原始的透明区域和画布,所以你需要这个:
convert a.png -background pink -gravity southeast -splice 100x200 b.png
当然,我可能毫无希望地错了,像库尔特一样困惑: - )
如果您需要帮助理解-splice
,我会举一些例子:
要将粉红色拼接到图像顶部,如下所示,请使用-gravity north
:
convert a.png -gravity north -background pink -splice x10 n.png
要将粉红色拼接到图像的底部,如下所示,请使用-gravity south
:
convert a.png -gravity south -background pink -splice x10 s.png
要将粉红色拼接到图像的左侧,如下所示,请使用-gravity west
并注意额外的宽度之前 x
:
convert a.png -gravity west -background pink -splice 10x w.png
要将粉红色拼接到图像的右侧,如下所示,请使用-gravity east
并注意额外的宽度之前 x
:
convert a.png -gravity east -background pink -splice 10x e.png
要拼接到左下角,请使用-gravity southwest
并将额外宽度放在x
之前,将额外高度放在x
之后:
convert a.png -gravity southwest -background pink -splice 10x50 sw.png
答案 1 :(得分:0)
如果将带有透明部分的图像放在另一个图像的顶部,则顶部图像的先前透明部分将采用底层图像的颜色。
除非您明确说明您想要透明部分的颜色(如果不是底层图像中的颜色),否则无法解决这个问题!
由于您没有提供示例图片,我必须提供自己的图片。我将使用以下命令生成它们:
convert -size 310x400 xc:red 310x400red-bg.png
convert -size 200x300 xc:gray +noise gaussian 200x300noise.png
结果如下:
现在把它们放在一起:
convert 310x400red-bg.png 200x300noise.png -gravity center -composite result.png
结果: