Найти - Пользователи
Полная версия: PIL - некорректный результат ресайза картинки с альфаканалом
Начало » Python для экспертов » PIL - некорректный результат ресайза картинки с альфаканалом
1 2
sypper-pit
:) ну так ты не задумывался, что можно конвертировать на промежутке , чисто теоретически :)
shiza
Ну чтож, объявляю этот топик, топиком ненависти к PIL =)
regall
sypper-pit
а может это происходит только с PNG
В PIL'e вообще все хреново, и не только с PNG, у меня пробелмы возникли с GIF-анимацией, так как PIL скотина GIF87 делает (который не поддерживает анимацию), пришлось дописывать свой модулец для поддержки анимированных гифов: познавательно, конечно, но, как бы медленно….
lorien
Ну чтож, объявляю этот топик, топиком ненависти к PIL smile
Есть инструмент и он призван решать свои задачи, просто нужно использовать PIL там, где не нужно ничего сложного/критичного по скорости (типа простенькую капчу сваять), …. Конечно если писать графический редактор =) =) =) …, то тут можно его и возненавидеть =).
lorien
а там какой-то ахтунг
+1, там, честно говоря, сплощь и рядом в коде ахтунг =)
lorien
Тока это, конечно, неправильно. А правильно было бы послать автору патчи, которые фиксят баги
Ага, куда посылать-то ? Последний релиз 3 года назад был =)
shiza
regall
Ага, куда посылать-то ? Последний релиз 3 года назад был
Сейчас есть бета новой версии 1.1.7, правда ничего кординально нового там нет.
У них есть список рассылки, но довольно вялый.

В общем, есть ощущение что PIL медленно умирает.
shiza
альтернативы:

freeimage: http://sourceforge.net/projects/freeimagepy/
imagemagick: http://www.imagemagick.org/script/api.php#python
gegl: http://gegl.org/pygegl/ (?)

ваши варианты? =)
slav0nic
gegl думаю довольно перспективная штука, хотят питонячий биндинг не смотрел
shiza
собственно говоря, проблема ради которой создавался топик, решилась следующим образом:
1. ставим патчик к PIL
http://git.kitsu.ru/patched/pil.git?a=commitdiff;h=b8f1c572430b06b5d4294fb2bf29327275120554

2. и делаем вот так:
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')
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB