更改了 Pillow 中 ImageEnhance.Brightness 的行为
Changed behaviour of ImageEnhance.Brightness in Pillow
我正在尝试以半不透明度将图像 B 粘贴到图像 A 上(即粘贴的图像是半透明的)。
在 pillow 2.1.0 版中,以下代码有效,在 3.3.1 版中不再有效:
A = Image.open('A.png')
B = Image.open('B.png')
enhancer = ImageEnhance.Brightness(B)
mask = enhancer.enhance(0.5)
print(mask.getpixel((10,10)), mask.getpixel((30,30)))
mask.save('Mask.png')
A.paste(B, (0,0), mask)
A.save('Result.png')
图片 A 是白色背景上的黑色 'A'
图像 B 是透明背景上的红色 'B'
图片如下
版本 2.1.0 为掩码的像素 30,30 生成 (127,0,0,127)
版本 3.3.1 为掩码的像素 30,30 生成 (127,0,0,255)
Image A
Image B
Pillow 是正确的,改变像素的亮度不应该改变它的透明度。很明显PIL有bug。
您真正想要的是从图像 B 中拆分 alpha,然后将 that 变成蒙版。使用 this answer:
中的技术
mask = B.split()[-1]
enhancer = ImageEnhance.Brightness(mask)
mask = enhancer.enhance(0.5)
我正在尝试以半不透明度将图像 B 粘贴到图像 A 上(即粘贴的图像是半透明的)。
在 pillow 2.1.0 版中,以下代码有效,在 3.3.1 版中不再有效:
A = Image.open('A.png')
B = Image.open('B.png')
enhancer = ImageEnhance.Brightness(B)
mask = enhancer.enhance(0.5)
print(mask.getpixel((10,10)), mask.getpixel((30,30)))
mask.save('Mask.png')
A.paste(B, (0,0), mask)
A.save('Result.png')
图片 A 是白色背景上的黑色 'A'
图像 B 是透明背景上的红色 'B'
图片如下
版本 2.1.0 为掩码的像素 30,30 生成 (127,0,0,127)
版本 3.3.1 为掩码的像素 30,30 生成 (127,0,0,255)
Image A Image B
Pillow 是正确的,改变像素的亮度不应该改变它的透明度。很明显PIL有bug。
您真正想要的是从图像 B 中拆分 alpha,然后将 that 变成蒙版。使用 this answer:
中的技术mask = B.split()[-1]
enhancer = ImageEnhance.Brightness(mask)
mask = enhancer.enhance(0.5)