Search code examples
pythonpython-imaging-libraryrgbgrayscale

Python Pil Change GreyScale Tif To RGB


I have a greyscale TIF File. I need to convert it to RGB/ read from it in a way I can work with it.

img = Image.open(GIF_FILENAME)
rgbimg = img.convert('RGB')
for i in range(5):
    print rgbimg.getpixel((i, 0))

The convert.("RGB") will automatically make everything (255,255,255) even though the picture is a really dark mostly black picture.

If I just read the greyscale numbers I get numbers from around 1400 to 1900.

I need to also save a copy of the picture as a RGB Jpeg. Picture in question: [Here]: https://i.sstatic.net/AuNJh.jpg

How would I go along doing this?


Solution

  • what about:

    img = Image.open(GIF_FILENAME)
    rgbimg = Image.new("RGBA", img.size)
    rgbimg.paste(img)
    rgbimg.save('foo.jpg')
    

    [EDIT]

    created a test:

    from PIL import Image
    from collections import defaultdict
    import pprint
    
    img = Image.open("kEwfFs3.png")
    rgbimg = Image.new("RGBA", img.size)
    rgbimg.paste(img)
    
    found_colors = defaultdict(int)
    for x in range(0, rgbimg.size[0]):
        for y in range(0, rgbimg.size[1]):
            pix_val = rgbimg.getpixel((x, y))
            found_colors[pix_val] += 1 
    pprint.pprint(dict(found_colors))
    
    rgbimg.save('kEwfFs3.jpg')
    

    And that outputs:

    {(0, 0, 0, 255): 747802,
     (1, 1, 1, 255): 397,
     (2, 2, 2, 255): 299,
     (3, 3, 3, 255): 255,
     (4, 4, 4, 255): 221,
     (5, 5, 5, 255): 200,
     (6, 6, 6, 255): 187,
     (7, 7, 7, 255): 138,
     (8, 8, 8, 255): 160,
     (9, 9, 9, 255): 152,
     (10, 10, 10, 255): 122,
     (11, 11, 11, 255): 116,
     (12, 12, 12, 255): 144,
     (13, 13, 13, 255): 117,
     (14, 14, 14, 255): 117,
     (15, 15, 15, 255): 102,
     (16, 16, 16, 255): 119,
     (17, 17, 17, 255): 299641,
     (18, 18, 18, 255): 273,
     (19, 19, 19, 255): 233,
    .................... etc .......
    .................... etc .......
     (249, 249, 249, 255): 616,
     (250, 250, 250, 255): 656,
     (251, 251, 251, 255): 862,
     (252, 252, 252, 255): 1109,
     (253, 253, 253, 255): 1648,
     (254, 254, 254, 255): 2964175}
    

    Which is what you would expect. Is your output different?