Python: PIL replace a single RGBA color

前端 未结 3 1489
渐次进展
渐次进展 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:37

    Try this , in this sample we set the color to black if color is not white .

    #!/usr/bin/python
    from PIL import Image
    import sys
    
    img = Image.open(sys.argv[1])
    img = img.convert("RGBA")
    
    pixdata = img.load()
    
    # Clean the background noise, if color != white, then set to black.
    
    for y in xrange(img.size[1]):
        for x in xrange(img.size[0]):
            if pixdata[x, y] == (255, 255, 255, 255):
                pixdata[x, y] = (0, 0, 0, 255)
    

    you can use color picker in gimp to absorb the color and see that's rgba color

    0 讨论(0)
  • 2020-11-30 04:45

    The Pythonware PIL online book chapter for the Image module stipulates that putpixel() is slow and suggests that it can be sped up by inlining. Or depending on PIL version, using load() instead.

    0 讨论(0)
  • 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

    0 讨论(0)
提交回复
热议问题