2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > pil对图像加透明 python_关于python:如何使用PIL将透明png图像与另一个图像合并...

pil对图像加透明 python_关于python:如何使用PIL将透明png图像与另一个图像合并...

时间:2022-12-15 04:38:47

相关推荐

pil对图像加透明 python_关于python:如何使用PIL将透明png图像与另一个图像合并...

我有一个透明的png图像"foo.png"

我打开了另一张图片

im = Image.open("foo2.png");

现在我需要的是将foo.png与foo2.png合并。

(foo.png包含一些文本,我想在foo2.png上打印该文本)

不要在python的命令末尾使用;:这很难看......

我会记住这一点,谢谢!!

import Image

background = Image.open("test1.png")

foreground = Image.open("test2.png")

background.paste(foreground, (0, 0), foreground)

background.show()

.paste()的第一个参数是要粘贴的图像。第二个是坐标,秘密酱是第三个参数。它表示将用于粘贴图像的蒙版。如果传递具有透明度的图像,则Alpha通道将用作遮罩。

检查文档。

哇 !!这样可行 !!谢谢

我错过了秘密酱,谢谢! :d

要确保前景在所有情况下都包含透明度,请使用foreground.convert('RGBA')作为mask参数。

你救了我,坦白

谢谢。我太缺少第三个参数了。

该死的。那是一些启示。

哇!这个解决方案在两周前立刻就做到了,但现在我已经完全忘记了它,现在我再次看到它,它再次成功!

我得到了ValueError: bad transparency mask

根据您的版本,您可能必须安装Python Image Library,并且:'来自PIL import Image`

太棒了,你可以使用图像作为面具。但我可以像svg一样使用矢量图像吗?

秘制酱很好吃

TypeError: paste() got an unexpected keyword argument 'alpha'

@DenizOzger要修复ValueError: bad transparency mask,请使用bg.paste(fg, (0, 0), fg.convert('RGBA'))

感谢您指出有关掩码的信息以及文档链接。

当背景图像还包含透明度时,Image.paste无法正常工作。您需要使用真正的Alpha Compositing。

Pillow 2.0包含一个执行此操作的alpha_composite函数。

background = Image.open("test1.png")

foreground = Image.open("test2.png")

Image.alpha_composite(background, foreground).save("test3.png")

编辑:两个图像都必须是RGBA类型。因此,如果它们是调色板等,你需要调用convert('RGBA')。如果背景没有alpha通道,那么你可以使用常规粘贴方法(应该更快)。

我只是使用paste()将一个半透明图像覆盖在另一个上,使用PIL,它按预期工作。它以什么方式不如预期的那样起作用?

@PeterHansen,当背景图像也包含透明度时,paste()无法按预期工作。

@PeterHansen有例子:/python-pillow/Pillow/issues/

@homm谢谢。那是很久以前我对我的尝试没有记忆。似乎我确实错过了你引用的关于背景图像也具有透明度的部分。

我得到ValueError: image has wrong mode

我得到ValueError: image has wrong made以及@DenizOzger

这对我有用,而粘贴是在我的背景中打出一个"透明孔"。

正如olt已经指出的那样,当源和目标都包含alpha时,Image.paste无法正常工作。

请考虑以下情形:

两个测试图像,都包含alpha:

layer1 = Image.open("layer1.png")

layer2 = Image.open("layer2.png")

像这样使用Image.paste合成图像:

final1 = Image.new("RGBA", layer1.size)

final1.paste(layer1, (0,0), layer1)

final1.paste(layer2, (0,0), layer2)

产生下面的图像(重叠的红色像素的alpha部分完全取自第二层。像素未正确混合):

使用Image.alpha_composite合成图像如下:

final2 = Image.new("RGBA", layer1.size)

final2 = Image.alpha_composite(final2, layer1)

final2 = Image.alpha_composite(final2, layer2)

生成以下(正确)图像:

感谢截图!真有帮助!

但是alpha_composite无法设置偏移量,您是否介绍完全替换paste函数的示例?

我猜你必须创建一个与garget图像大小相同的新空图像,将图层粘贴到正确的位置,然后使用alpha_compositing将新图像混合到目标图像上。

也可以使用混合:

im1 = Image.open("im1.png")

im2 = Image.open("im2.png")

blended = Image.blend(im1, im2, alpha=0.5)

blended.save("blended.png")

这个对我来说很有意义。图像必须具有完全相同的大小,但没关系。粘贴功能并没有完全削减它...

'ValueError:图片不匹配'

可能,它们具有不同的尺寸。您可能需要缩放或裁剪其中一个。

@Schtze看到nvd的评论,因为他/她没有ping(使用@blahblah)你

def trans_paste(bg_img,fg_img,box=(0,0)):

fg_img_trans = Image.new("RGBA",bg_img.size)

fg_img_trans.paste(fg_img,box,mask=fg_img)

new_img = Image.alpha_composite(bg_img,fg_img_trans)

return new_img

嗨,您可以为答案添加更多背景吗?否则,请求者不太可能了解其背后的"原因"。

有一个类似的问题,很难找到答案。使用以下功能可以将具有透明度参数的图像粘贴到特定偏移处的另一个图像上。

import Image

def trans_paste(fg_img,bg_img,alpha=1.0,box=(0,0)):

fg_img_trans = Image.new("RGBA",fg_img.size)

fg_img_trans = Image.blend(fg_img_trans,fg_img,alpha)

bg_img.paste(fg_img_trans,box,fg_img_trans)

return bg_img

bg_img = Image.open("bg.png")

fg_img = Image.open("fg.png")

p = trans_paste(fg_img,bg_img,.7,(250,100))

p.show()

ValueError: images do not match

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。