我有一个带有黑色背景和白色线条(从Autocad导出)的2D绘图,我想使用Python PIL library创建一个保留缩略图的线条。
但我用“缩略图”方法得到的只是一张散落着白点的黑色图片。
注意,如果我把图像放入一个固定宽度的IMG标签中,我会得到我想要的结果(但图像是完全加载的)。
在您的评论之后,这里是我的示例代码:
from PIL import Image
fn = 'filename.gif'
im = Image(fn)
im.convert('RGB')
im.thumbnail((300, 300), Image.ANTIALIAS)
im.save('newfilename.png', 'PNG')
我该怎么办?
thumbnail
使用的默认大小调整方法是最近的,这是一个非常糟糕的选择。例如,如果您调整到原始大小的1/5,它将输出一个像素并抛出下一个4-一个像素宽的行在结果中显示的几率只有1/5!令人惊讶的是双线性和双三次性并没有更好。他们采用一个公式,并将其应用到离源点最近的2或3个像素上,但仍有许多像素不在他们的视线内,而且这个公式将不再强调线条的大小。
最好的选择是抗锯齿,它似乎考虑了所有的原始图像,而没有丢弃任何像素。线条会变暗,但不会完全消失;如有必要,您可以采取额外的步骤来提高对比度。
请注意,如果使用的是调色板图像,所有这些方法都将返回到最近的值,即
im.mode == 'P'
。必须始终转换为“RGB”。下面是一个取自electronics.stackexchange站点https://electronics.stackexchange.com/questions/5412/easiest-and-best-poe-ethernet-chip-micro-design-for-diy-interface-with-custom-ard/5418#5418的示例
使用默认的最接近算法,我假设它与您得到的结果相似:
使用反别名算法:
默认情况下,
im.resize
使用NEAREST
过滤器,它将执行您看到的操作——丢失信息,除非它恰好落在适当的模块化像素上。而是打电话
这应该保留你的台词。如果没有,请尝试
Image.BICUBIC
或Image.ANTIALIAS
。其中任何一个都应该比NEAREST
工作得更好。相关问题 更多 >
编程相关推荐