如何使用PIL将透明图像的背景设置为白色?

3

我有一张背景透明的PNG图片,现在想要将其调整大小并变为白色背景,使用PIL库该怎么做呢?

以下是我的代码:

basewidth = 200
img = Image.open("old.png")
wpercent = (basewidth/float(img.size[0]))
hsize = int((float(img.size[1]) * float(wpercent)))
img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS)hsize = int((float(img.size[1]) * float(wpercent)))
img.save("new.png")

我们进行了新的编辑,请去检查。 - khakishoiab
@Banuta Alin Alexandru 的第一个猜测是尝试将 data[:,:,:,3] 替换为 data[:,:,:,4],在 data[:,:,:,3][mask] = [r2,g2,b2,alpha2] 行中。 - Chachmu
谢谢,现在它像魔法一样工作! - Banuta Alin Alexandru
2个回答

2

您可以检查每个像素的 alpha 通道是否设置为小于 255(这意味着它不是不透明的),然后将其设置为白色和不透明。

如果您的图像除了背景之外还有透明部分,那么这可能不是一种理想的解决方案。

...
pixels = img.load()

for y in range(img.size[1]): 
    for x in range(img.size[0]): 
        if pixels[x,y][3] < 255:    # check alpha
            pixels[x,y] = (255, 255, 255, 255)
img.save("new.png") 

这并不是理想的解决方案,因为正如你所说,我的图像上可能有透明部分。 - Banuta Alin Alexandru

0
import Image
from resizeimage import resizeimage

f = Image.open('old.png') 
alpha1 = 0 # Original value
r2, g2, b2, alpha2 = 255, 255, 255,255 # Value that we want to replace it with

red, green, blue,alpha = data[:,:,0], data[:,:,1], data[:,:,2], data[:,:,3]
mask = (alpha==alpha1)
data[:,:,:3][mask] = [r2, g2, b2, alpha2]

data = np.array(f)
f = Image.fromarray(data)
f = f.resize((basewidth,hsize), PIL.Image.ANTIALIAS)

f.save('modified.png', image.format)

我认为它会调整大小并改变颜色。 - khakishoiab
那么就改成@Chachmu。 - khakishoiab
我认为它应该看起来像我刚刚提出的编辑。 - Chachmu
谢谢,我觉得现在应该可以了,你觉得呢?@Chachmu - khakishoiab
这似乎依赖于一个变量 data,但在当前编辑中未定义。 - Rob
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接