我在另一张图片上粘贴图片,在查看this问题后,我看到为了粘贴透明图片,您需要执行
background = Image.open("test1.png")
foreground = Image.open("test2.png")
background.paste(foreground, (0, 0), foreground)
正常图片,您应该
background = Image.open("test1.png")
foreground = Image.open("test2.png")
background.paste(foreground, (0, 0)) // difference here
我的问题是,如何检查图像是否透明,以便我可以确定如何使用paste
方法(使用或不使用最后一个参数)。
答案 0 :(得分:2)
检查图像的模式以获得Alpha透明层。例如,RGB没有透明度,但RGBA没有透明度。
有关详情,请参阅https://pillow.readthedocs.io/en/latest/handbook/concepts.html。
答案 1 :(得分:0)
我提出了以下函数作为解决方案,该函数将PIL Image
对象作为参数。如果图像使用索引颜色(例如在GIF中),则它将获取调色板中透明颜色的索引(img.info.get("transparency", -1)
),并检查它是否在画布中的任何地方使用(img.getcolors()
)。如果图像处于RGBA模式,则假定它具有透明度,但是它通过获取每个通道的最小值和最大值(img.getextrema()
)进行双重检查,并检查alpha通道的最小值是否低于255。 / p>
def has_transparency(img):
if img.mode == "P":
transparent = img.info.get("transparency", -1)
for _, index in img.getcolors():
if index == transparent:
return True
elif img.mode == "RGBA":
extrema = img.getextrema()
if extrema[3][0] < 255:
return True
return False
答案 2 :(得分:0)
我使用 numpy 检查 alpha 通道:
def im_has_alpha(img_arr):
'''
returns True for Image with alpha channel
'''
h,w,c = img_arr.shape
return True if c ==4 else False
使用它,假设 pil_im
是您的枕头图片:
import numpy as np
has_transparency = im_has_alpha(np.array(pil_im))