Banuta Alin Alexandru
Banuta Alin Alexandru

Reputation: 113

How can I set the background of a transparent image to white, using PIL?

I have a PNG image with transparent background and I want to resize it to another image, but with a white background instead of a transparent one. How can I do that with PIL?

Here is my code:

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")

Upvotes: 3

Views: 14673

Answers (2)

mpurg
mpurg

Reputation: 211

You can check whether the alpha channel is set to less than 255 on each pixel (which means that it is not opaque) and then set it to white and opaque.

It might not be an ideal solution if you have transparency in other parts of your image, besides the background.

...
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") 

Upvotes: 3

khakishoiab
khakishoiab

Reputation: 10768

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)

Upvotes: 0

Related Questions