Прозрачное изменение размера png с помощью библиотеки изображений Python и эффекта ореола
Есть пара похожих вопросов по SO, но ни один из них не помог. В основном я пытаюсь изменить размер простого изображения PNG, как показано здесь:
http://media.spiralknights.com/wiki-images/3/3e/Equipment-Proto_Sword_icon.png (от mmo Spiral Knights, авторское право Three Rings Entertainment)
Первоначально я реализовал утилиту, которая использует эти изображения в php, и утилита изменения размера работала там отлично. Я использовал метод, описанный на странице imagecopyresampled в документации PHP.
Честно говоря, я даже не могу заставить его изменить размер в Photoshop, но в Python результаты почти катастрофические. Я последовательно получаю эффект ореола, и я полагаю, что это по крайней мере частично соответствует фактическим значениям RGBA прозрачных пикселей. Здесь эта картина говорит лучше:
(Второе-последнее изменение размера было только предложением, которое я видел на другом форуме, чтобы изменить размер первого до двойного окончательного размера, и это ДЕЙСТВИТЕЛЬНО помогло хотя бы немного, но не достаточно)
Изображение уже находится в режиме RGBA, когда оно изменяется.
Как вы можете видеть, PHP и Photoshop не изменяют размеры. Честно говоря, все, кроме изменения размера PHP, делает СЛИШКОМ большую работу, мне нравится минимальная палитра в изображении php (если вы посмотрите на более крупные версии, вы увидите, что изменение размера PHP использует меньше между цветами), но я мог бы жить с тем, как Photoshop изменил его размер или даже изменил размер внутренней части питона, но ореол недопустим.
Мне кажется - и исправьте меня, если я ошибаюсь - что PHP и Photoshop, кажется, знают, что не используют цвет пикселей в альфа-канале при интерполяции, но python использует эту светлую границу, которая в противном случае прозрачна в своем размере.
К сожалению, есть много разных значков, которые мне нужно изменить, с разными профилями, поэтому они не так просты, как этот круглый, но это был только первый, который я использовал во время экспериментов.
Это не большой вопрос кода сам по себе, но если вам нужно что-то посмотреть, то это суть:
>> import Image
>> img = Image.open('swordorig.png')
>> img
<PngImagePlugin.PngImageFile image mode=RGBA size=256x256 at 0x2A3AF58>
>> img.resize((36,36), Image.ANTIALIAS).save('swordresize.png')
В конечном итоге возникает вопрос: есть ли способ сказать PIL NOT, что при повторной дискретизации используется цвет пикселя с альфа-значением 0?