2009-09-06 1 views
8

я получаю примерно такие же недурна изменения размеров из всех 4-х алгоритмов PILPIL: изменение размера изображения: алгоритм похожи на Фирефокс

>>> 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") 

Но результаты выглядят гораздо хуже, чем просто изменение размера в светлячок.

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

Как я могу получить подобный эффект в результате FireFox с помощью PIL (или другой питон библиотеки изображений)?

EDIT: Наведите курсор мыши, чтобы увидеть, что каждое изображение

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

Похоже RGB, а затем ANTIALIS выглядит лучше. Любые другие рекомендации?

Для справки, это тот, который выглядел лучше:

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

Какую версию PIL вы используете? –

+0

Версия PIL: /usr/lib/python2.5/site-packages/PIL/PIL-1.1.6.egg-info –

+0

Gimp производит тот же результат, что и PIL. –

ответ

8

Я изменил размер «оригинала» на Python и нашел те же результаты, что и вы. Я также изменил размер «оригинала» с помощью GIMP, и я получил то же (если не хуже) качество. Это заставило меня подозревать, что Firefox обманывает. Возможно, он преобразуется в RGB («оригинальный» режим имеет индексный цвет). Таким образом, следующий код:

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

Результат почти такой же, как и у Firefox.

+0

Будет ли это стратегией общего назначения, чтобы получить хорошие миниатюры? Если вам нужен пример моего корпуса, у меня есть около 10 000 изображений: http://metaward.com/awards –

+2

Определенно. Изменение размера изображений с индексированными цветами обычно не дает хороших результатов. Если вы не заботитесь о сохранении палитры, тогда вы всегда должны перемещаться в RGB, затем изменять размер и (в случае) снова уменьшать глубину цвета. –

+0

Спасибо, Роберто. Почему PIL не делает это по умолчанию, если это известный метод? –

0

Попробуйте использовать метод resize() вместо thumbnail(). По моему опыту, они ведут себя по-разному.

Кроме того, ваш код показывает чтение .gif, но ваш оригинал .png. Убедитесь, что у вас действительно есть все исходные данные, прежде чем вы начнете его уменьшать.

+0

Извините, я вырезал линию, где я сделал оригинал. Но да, это было просто обращение. Я попробую изменить размер и сравнить. –

+0

На странице примера теперь все размеры(), и они все еще выглядят намного хуже, чем способ FF. Любые другие предложения? –

1

Похоже на RGB, а затем ANTIALIS выглядит лучше. Любые другие рекомендации?

Нет, это действительно ожидаемый результат. Любое изменение размера, выполненное в исходном режиме ограниченной палитры, скорее всего, приведет к образованию дряблового мусора из-за отсутствия доступных между ними цветов в палитре; и ANTIALIAS - это только фильтр размера, предназначенный для масштабирования: BILINEAR и BICUBIC действительно занимают всего два пикселя на ось и смешиваются между ними, что отлично подходит для масштабирования, но не работает вообще, когда один или оба оси уменьшаются.

К сожалению thumbnail() никогда не работал должным образом, поэтому вам нужно сделать это самостоятельно.

+0

, тогда мне бы хотелось, чтобы .thumbnail был удален и заменен .thumbnail (size), который при необходимости преобразует палитру, а затем использует изменение размера. Как новичок в PIL, эскиз казался именно тем, что мне нужно. –

+0

Действительно, это один из изворотливых уголков PIL, который может быть улучшен, но также привлекательная ловушка для нового пользователя. – bobince

+0

Собственно, делаю это с RGB, я потерял альфа-канал. Любой способ сохранить это? –