如何使用 Pillow like photoshops "hard edges" 算法在 python 中调整图像大小

How to resize an image in python using Pillow like photoshops "hard edges" algorithm

我正在尝试在不使用任何形式的重采样的情况下缩小图像尺寸。我希望它完全保持硬边,而不添加任何模糊/抗锯齿。本质上,与 photoshop 的“硬边”重采样模式完全一样。但是,Pillow 的每一种内置重采样方法都会给我带来某种模糊或混叠效果。

我目前使用的代码如下

fileName = "big.jpg"

for i in range(6):
    filename16 = "small" + str(i) + ".jpg" 
    img = Image.open(fileName)

    img16 = img.resize((16, 16), resample=i)

    img16.save(filename16)

原图:

结果

使用以下方法将图像大小调整为 16x16;

Photoshop 的“最近邻 - 硬边”

0 个枕头最近的邻居

1 枕头兰佐斯

2 线性枕头

3 枕头双三次

4个抱枕

5 枕头汉明

或者并排,可以清楚地看到所有的重采样方法都改变了图像的某些东西

我怎样才能得到 Pillow 中 photoshop 的“硬边”选项所达到的效果? 谢谢!

确保将图像保存为 .png 文件。 .jpg 文件是有损的,并且不能很好地压缩硬线,因为它们旨在存储常规照片。如果您查看原始照片数据,当您使用 NEAREST 进行插值时,您会看到区域之间的急剧过渡,但由于图像保存为 .jpg,因此所有这些都消失了 window。


这是使用 NEAREST 缩小尺寸后的原始数据:

.jpg 数据如下所示:

如果有杂音,你可以看到过渡。