Python: PIL replace a single RGBA color

前端 未结 3 1490
渐次进展
渐次进展 2020-11-30 04:22

I have already taken a look at this question: SO question and seem to have implemented a very similar technique for replacing a single color including the alpha values:

3条回答
  •  遥遥无期
    2020-11-30 04:46

    If you have numpy, it provides a much, much faster way to operate on PIL images.

    E.g.:

    import Image
    import numpy as np
    
    im = Image.open('test.png')
    im = im.convert('RGBA')
    
    data = np.array(im)   # "data" is a height x width x 4 numpy array
    red, green, blue, alpha = data.T # Temporarily unpack the bands for readability
    
    # Replace white with red... (leaves alpha values alone...)
    white_areas = (red == 255) & (blue == 255) & (green == 255)
    data[..., :-1][white_areas.T] = (255, 0, 0) # Transpose back needed
    
    im2 = Image.fromarray(data)
    im2.show()
    

    Edit: It's a slow Monday, so I figured I'd add a couple of examples:

    Just to show that it's leaving the alpha values alone, here's the results for a version of your example image with a radial gradient applied to the alpha channel:

    Original: alt text

    Result: alt text

提交回复
热议问题