SO 上有几个类似的问题,但没有一个真正有帮助。基本上我正在尝试调整一个简单的 png 图像的大小,如下所示:
http://media.spiralknights.com/wiki-images/3/3e/Equipment-Proto_Sword_icon.png http://media.spiralknights.com/wiki-images/3/3e/Equipment-Proto_Sword_icon.png(来自大型多人在线游戏《螺旋骑士》,版权所有三环娱乐)
我最初实现了一个在 php 中使用这些图像的实用程序,并且那里的调整大小实用程序运行得非常好。我使用了 PHP 文档中 imagecopyresampled 页面上描述的方法。
老实说,我什至无法在 Photoshop 中更好地调整大小,但在 python 中结果几乎是灾难性的。我始终得到光晕效果,并且我相信这至少部分与透明像素的实际 RGBA 值有关。在这里,这张图更能说明问题:
(倒数第二个调整大小只是我在另一个论坛上看到的建议,首先将大小调整为最终大小的两倍,它至少有一点帮助,但还不够)
调整图像大小时图像已处于 RGBA 模式。
正如您所看到的,PHP 和 Photoshop 调整大小是没有光环的。老实说,除了 PHP 调整大小之外的所有工作都做了太多工作,我喜欢 php 图像中的最小调色板(如果您查看较大的版本,您可以看到 PHP 调整大小在颜色之间使用较少),但我可以接受 Photoshop 的方式已经调整了它的大小,甚至Python的内部也调整了大小,但光环是不可接受的。
在我看来——如果我错了,请纠正我——PHP 和 Photoshop 似乎知道在插值时不使用 alpha 通道中像素的颜色,但 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 在重采样时不要使用 alpha 为 0 的像素的颜色?