PIL: Image resizing : Algorithm similar to firefox's
Question: I'm getting about the same _bad looking_ resizing from all the 4 algorithms of
PIL

    
    
    >>> data = utils.fetch("http://wavestock.com/images/beta-icon.gif")
    >>> image = Image.open(StringIO.StringIO(data)); image.save("/home/ptarjan/www/tmp/metaward/original.png")
    >>>
    >>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.ANTIALIAS).save("/home/ptarjan/www/tmp/metaward/antialias.png")
    >>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.BILINEAR).save("/home/ptarjan/www/tmp/metaward/bilinear.png")
    >>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.BICUBIC).save("/home/ptarjan/www/tmp/metaward/bicubic.png")
    >>> image = Image.open(StringIO.StringIO(data)); image.resize((36,36), Image.NEAREST).save("/home/ptarjan/www/tmp/metaward/nearest.png")
    >>>
    >>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.ANTIALIAS); image.save("/home/ptarjan/www/tmp/metaward/antialias-thumb.png")
    >>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.BILINEAR); image.save("/home/ptarjan/www/tmp/metaward/bilinear-thumb.png")
    >>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.BICUBIC); image.save("/home/ptarjan/www/tmp/metaward/bicubic-thumb.png")
    >>> image = Image.open(StringIO.StringIO(data)); image.thumbnail((36,36), Image.NEAREST); image.save("/home/ptarjan/www/tmp/metaward/nearest-thumb.png")
    >>>
    >>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.ANTIALIAS).save("/home/ptarjan/www/tmp/metaward/antialias-rgb.png")
    >>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.BILINEAR).save("/home/ptarjan/www/tmp/metaward/bilinear-rgb.png")
    >>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.BICUBIC).save("/home/ptarjan/www/tmp/metaward/bicubic-rgb.png")
    >>> image = Image.open(StringIO.StringIO(data)); image.convert("RGB").resize((36,36), Image.NEAREST).save("/home/ptarjan/www/tmp/metaward/nearest-rgb.png")
    

But the results look much worse that just resizing in firefox.

<http://paulisageek.com/tmp/metaward/images.html>

How can I get a similar effect to the firefox result using PIL (or another
python image library)?

**EDIT** : Hover your mouse to see what each image is

![](http://paulisageek.com/tmp/metaward/original.png)
![](http://paulisageek.com/tmp/metaward/antialias.png)
![](http://paulisageek.com/tmp/metaward/bicubic.png)
![](http://paulisageek.com/tmp/metaward/bilinear.png)
![](http://paulisageek.com/tmp/metaward/nearest.png)
![](http://paulisageek.com/tmp/metaward/antialias-thumb.png)
![](http://paulisageek.com/tmp/metaward/bicubic-thumb.png)
![](http://paulisageek.com/tmp/metaward/bilinear-thumb.png)
![](http://paulisageek.com/tmp/metaward/nearest-thumb.png)
![](http://paulisageek.com/tmp/metaward/antialias-rgb.png)
![](http://paulisageek.com/tmp/metaward/bicubic-rgb.png)
![](http://paulisageek.com/tmp/metaward/bilinear-rgb.png)
![](http://paulisageek.com/tmp/metaward/nearest-rgb.png)

It looks like the RGB and then ANTIALIS looks the best. Any other
recommendations?

For reference, this is the one that looked the best :

    
    
    >>> image = Image.open(StringIO.StringIO(data)); 
    >>> image.convert("RGB").resize((36,36), Image.ANTIALIAS)
    


Answer: I resized the "original" with Python and found the same results as you did. I
also resized the "original" with GIMP and I got the same (if not inferior)
quality. This made me suspect that Firefox cheats. Possibly it converts to RGB
("original" mode is indexed color). Thus the following code:

    
    
    import Image
    im=Image.open("beta-icon.gif")
    im = im.convert("RGB")
    im=im.resize((36,36), Image.ANTIALIAS)
    im.save("q5.png")
    

The result is almost as good as that of Firefox.

