使用ImageMagick扩展 canvas 不让透明部分成为新图片的背景色
Use ImageMagick to extend canvas and not have transparent section become the background colour of the new image
这道题:Use ImageMagick to place an image inside a larger canvas我已经做过了,但是我想修改一下,让新的区域有不同的颜色,而不是让原图的透明部分变成相同的颜色。
这将如何实现?
编辑:
输入图像:
xxxxxxxx
xx...xxx
xxxxxxxx
输出图像:
xxxxxxxxiii
xx...xxxiii
xxxxxxxxiii
iiiiiiiiiii
- Xs (
x
)代表原图。
- 点 (
.
) 代表透明像素。
- 是(
i
)表示新canvas的背景色。
我想到的命令是这样的:
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
.
如果您将带有透明部分的图像放在另一幅图像的顶部,则顶部图像之前透明的部分将采用下面图像的颜色。
除非你明确说明你希望透明部分变成什么颜色(如果不是底层图像的颜色),否则没有办法解决这个问题!
由于您没有提供示例图片,我将不得不提供自己的图片。我将使用这些命令生成它们:
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
结果:
我认为你在混淆自己,Kurt 和我说你想放置你的新图像 "inside a larger canvas" 而你实际上不想影响现有图像canvas(即它的透明区域必须保持透明)。我认为,根据您的图表,您想要做的是在现有图表周围附加一些新的 canvas - 如果是这种情况,您需要 -splice
添加 canvas 而不是比 -composite
覆盖现有的。
因此,如果您从这个中间透明的空心绿色矩形开始:
你实际上想在它周围拼接(添加)一些额外的canvas而不影响原来的透明区域和canvas,所以你需要这个:
convert a.png -background pink -gravity southeast -splice 100x200 b.png
当然,我可能和 Kurt 一样大错特错 :-)
如果你需要一些帮助来理解 -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
并注意额外的宽度是 before the x
this时间:
convert a.png -gravity west -background pink -splice 10x w.png
要将粉红色拼接到图像的右侧,如下所示,使用 -gravity east
并注意额外的宽度是 before the x
this时间:
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
这道题:Use ImageMagick to place an image inside a larger canvas我已经做过了,但是我想修改一下,让新的区域有不同的颜色,而不是让原图的透明部分变成相同的颜色。
这将如何实现?
编辑:
输入图像:
xxxxxxxx
xx...xxx
xxxxxxxx
输出图像:
xxxxxxxxiii
xx...xxxiii
xxxxxxxxiii
iiiiiiiiiii
- Xs (
x
)代表原图。 - 点 (
.
) 代表透明像素。 - 是(
i
)表示新canvas的背景色。
我想到的命令是这样的:
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
.
如果您将带有透明部分的图像放在另一幅图像的顶部,则顶部图像之前透明的部分将采用下面图像的颜色。
除非你明确说明你希望透明部分变成什么颜色(如果不是底层图像的颜色),否则没有办法解决这个问题!
由于您没有提供示例图片,我将不得不提供自己的图片。我将使用这些命令生成它们:
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
结果:
我认为你在混淆自己,Kurt 和我说你想放置你的新图像 "inside a larger canvas" 而你实际上不想影响现有图像canvas(即它的透明区域必须保持透明)。我认为,根据您的图表,您想要做的是在现有图表周围附加一些新的 canvas - 如果是这种情况,您需要 -splice
添加 canvas 而不是比 -composite
覆盖现有的。
因此,如果您从这个中间透明的空心绿色矩形开始:
你实际上想在它周围拼接(添加)一些额外的canvas而不影响原来的透明区域和canvas,所以你需要这个:
convert a.png -background pink -gravity southeast -splice 100x200 b.png
当然,我可能和 Kurt 一样大错特错 :-)
如果你需要一些帮助来理解 -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
并注意额外的宽度是 before the x
this时间:
convert a.png -gravity west -background pink -splice 10x w.png
要将粉红色拼接到图像的右侧,如下所示,使用 -gravity east
并注意额外的宽度是 before the x
this时间:
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