更改了 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)