On Thu, Nov 12, 2009 at 3:59 PM, Ivan Elchin <ivanger...@gmail.com> wrote:
> I have a problem, when i resizing an image with alphachannel.

You can try converting your image to RGBa (premultiplied alpha),
resizing it, then converting back to RGBA. The problem here is that
there are dirty pixels with 0 alpha, and they get interpolated like
everything else. On my PIL this works:

from PIL import Image

im = Image.open("sega.png")
im = im.convert("RGBa")

cur_width, cur_height = im.size
new_width, new_height = (200, 200)

if not new_width == 0 and not new_height == 0:
   ratio = min(float(new_width)/cur_width,
               float(new_height)/cur_height)
else:
   if new_width == 0:
       ratio = float(new_height)/cur_height
   else:
       ratio = float(new_width)/cur_width


new_dimensions = (int(round(cur_width*ratio)),
                 int(round(cur_height*ratio)))

new_im = im.resize(new_dimensions, Image.ANTIALIAS)
new_im = new_im.convert("RGBA")

new_im.save('rez.png')

Though my PIL has many modifications, I'm not sure if RGBA->RGBa->RGBA
is implemented in vanilla 1.1.6. (after checking) Ah, yes, it's not.
Though you can try recompiling PIL with this patch:
http://git.kitsu.ru/patched/pil.git?a=commitdiff;h=b8f1c572430b06b5d4294fb2bf29327275120554
_______________________________________________
Image-SIG maillist  -  Image-SIG@python.org
http://mail.python.org/mailman/listinfo/image-sig

Reply via email to