Найти - Пользователи
Полная версия: PIL - некорректный результат ресайза картинки с альфаканалом
Начало » Python для экспертов » PIL - некорректный результат ресайза картинки с альфаканалом
1 2
shiza
Есть исходная картинка:


Есть код (кусок код который отвечает за ресайз в приложении django photologue, обкоцаный так, чтоб смысл остался).

import Image

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

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.save('rez.png')
После ресайза - получаем некрасивые серые артефакты на границах:





Пробовал разные варианты ресемплирования - не помогает (кроме линейного, но там все плохо по другой причине).

По моим ощущениям это от того, что рейсайз альфаканала рассинхронизируется с ресайзом остальных каналов.

Хотелось-бы обойти это в PIL (имеенно его использует django photologue), но уже кончились идеи. =)
igor.kaist
Сам неоднократно замечал глюки PIL с альфаканалом :( Может его отдельно зарезайзить? Разделить методом split а потом соединить?
shiza
igor.kaist Пробовал ресайзить альфаканал отдельно от остальных - результат тот-же. :(
Пытался еще поиграть с контрастностью, ярокостью альфаканала, чтоб он немного сместил свою прозрачность в нужную сторону - тоже без видимого успеха.
Dimka665
та же картина и при редактировании изображений в фотошопе.
думаю стоит дополнительно обрабатывать изображение после ресайза.
Андрей Светлов
Просто логотипы, товарные знаки, иконки и проч нужно ресайзить без антиалиаса.
Это - правило дизайна. Или векторная графика - или “примитив со ступеньками”. Посередине ничего нет.
shiza
Dimka665
та же картина и при редактировании изображений в фотошопе.
Очень странно. Попробовал GIMP, Фотошоп, ImageMagick - все нормально (чистенько и красиво).
Вот например что получается в ImageMagick:
regall
Уже много раз убеждался в бедности PIL'a, мое мнение: однозначно лучше использовать PythonMagick + PythonMagickWand.
Плюсы:
1. Работает несравненно быстрее.
2. Имеет не сравнительно больше различный функций.
Минусы:
1. Плохой порт на винду (хотя думаю, это не для всех минусы). Использовал в вебе для наложения эффектов на картинки, сервак - фря, а моя -то машинка локальная - на винде бегала, пришлось повозится, чтоб поставить MagickWand на винду изрядно =)
2. Очень сишный подход к разработке =) (так как просто обертка), хотя многих это и не пугает.
shiza
Я бы рад склонится к ImageMagick, если-бы не завязанное на PIL приложение - django photologue, которое уже используется.
sypper-pit
а может это происходит только с PNG
pasaranax
sypper-pit
а может это происходит только с PNG
я думаю, ты прав, потому что альфа-канал есть только у 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