python PIL : best scaling method that preserves lines

标签 python thumbnails python-imaging-library

我有一个黑色背景和白色线条的二维绘图(从 Autocad 导出),我想创建一个保留线条的缩略图,使用 Python PIL library .

但是我用'thumbnail'方法得到的只是一张散布着白点的黑色图片。

请注意,如果我将图像放入固定宽度的 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 使用的默认调整大小方法是 NEAREST,这是一个非常糟糕的选择。例如,如果您将大小调整为原始大小的 1/5,它将输出一个像素并丢弃接下来的 4 个像素 - 一个像素宽的线只有五分之一的机会出现 在结果中!

令人惊讶的是 BILINEAR 和 BICUBIC 并没有好多少。他们采用一个公式并将其应用于距离源点最近的 2 或 3 个像素,但仍有很多像素他们没有看,并且该公式无论如何都会淡化该线。

最好的选择是 ANTIALIAS,它似乎考虑了所有原始图像而没有丢弃任何像素。线条会变暗,但不会完全消失;如有必要,您可以执行额外的步骤来提高对比度。

请注意,如果您使用调色板图像,即 im.mode == 'P',所有这些方法都将回退到 NEAREST。您必须始终转换为“RGB”。

from PIL import Image
im = Image.open(fn)
im = im.convert('RGB')
im.thumbnail(size, Image.ANTIALIAS)

这是一个取自 electronics.stackexchange 网站的示例 https://electronics.stackexchange.com/questions/5412/easiest-and-best-poe-ethernet-chip-micro-design-for-diy-interface-with-custom-ard/5418#5418

使用默认的 NEAREST 算法,我假设它与您的结果相似:

NEAREST

使用 ANTIALIAS 算法:

ANTIALIAS

关于 python PIL : best scaling method that preserves lines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7096323/

相关文章:

python - Python 中的轮廓标签

python - AngularJS request.POST 返回 QueryDict : {}

java - 如何在 J2ME 中从大图像文件制作拇指?

php - 为文本文件生成缩略图

每次有 0 时都会重置 Python pandas cumsum

python - python中的 pickle 方法描述符对象

java - 在 Java 中加载大图像作为缩略图而没有内存问题?

python - 在 Python 中使用 Pillow 从图像裁剪区域

python - “元组”对象不支持项目分配

python - 在Python中以二进制图像在多个对象周围绘制边界矩形