image - 使用 PIL (Pillow) 和 Image 但保持良好的分辨率

标签 image python-imaging-library image-resizing

我正在使用 PIL 来调整我的图片大小。其中大部分是 640x480,有些更大。其中大部分是 png 格式,但我也有 jpeg 扩展名。 我想将所有图像的大小调整为 32x32 像素,但我注意到使用 PIL 后分辨率似乎发生了变化。

我发现这是一个典型的问题,而且通常是在保存图像时弄清楚的问题。 我尝试了不同的“质量”值,我阅读了尝试不同参数(例如“子采样”)的文档,并尝试了 jpeg 和 png 格式。

这是我的代码:

from PIL import Image

im = Image.open(os.path.join(my_path, file_name))
            img = im.resize((32, 32))
            if grey_scale is True:
                img = img.convert('L')  # to resize image in gray scale
            img.save(os.path.join(my_path, 
file_name[:file_name.index('.')] + '.jpg'), "JPEG", quality=100) 

这里有我的输入图像 Original input image

这里我有通过我的代码获得的颗粒状输出

enter image description here

我怎样才能将我的图片调整得更小,同时保持很好的分辨率?

最佳答案

您想要的那种图像转换是不可能的。当您尝试将光栅图像调整为较低的像素尺寸时,您必须对其进行下采样,或者根本不对其进行采样(简单调整大小)。即使您可以保留分辨率(图像中的像素总数),但仍然因为一个像素一次可以代表一种颜色(至少在基于子像素的显示器中,如显示器),并且您的最终图像只有 1024它们,并且原始图像中的细节远远超过这些像素数量可以表示的细节,这总是会导致最终图像中的质量相当低(带有伪影的像素化图像)。

但这不是一般情况,因为这在很大程度上取决于图像所代表的细节类型。如果图像不复杂(不包含很多颜色变化),则可以将其大小调整为质量相当低的版本,而不会丢失细节。

746x338 尺寸图片

enter image description here

上一张图片的 32x32 尺寸版本

enter image description here

这两个图像之间几乎没有区别(除了它们的物理尺寸),即使它们的尺寸有很大不同。原因是这些是在大范围内包含相同像素值的非复杂图像,这使得在不损失细节的情况下更容易调整它们的大小。

现在,如果在一张复杂的图像上尝试相同的过程,就像您在问题中给出的那样,结果将是一张像素化图像。

解决方案:-

  • 您可以在最终图像中选择较大的尺寸值 (比 32x32 多很多)如果你想保持图像质量。

  • 创建一个 Vector 等效于您的图像,即分辨率 独立的,可以调整到更大/更小的物理尺寸 不影响图像质量。

附注:- 不要保存带有 .jpg 扩展名的 .png 图像,因为 jpg 是一种有损压缩技术(大部分情况下),这会导致最终质量较低图像,然后是原始图像,即使没有对其进行任何处理。

关于image - 使用 PIL (Pillow) 和 Image 但保持良好的分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56278307/

相关文章:

python - 将图像转换为其他图像

python-imaging-library - PIL简单图片粘贴——图片变色

java - 调整图像大小不起作用

java - 如何在 Java 中以相同或更低的 DPI 调整图像大小

image - 如何基于二进制掩码裁剪图像

image - 图像中手绘逻辑门的分割

php - 如何对齐表格 td, tcpdf 中的图像

python - 如何在 Python 中的图像上打印印地语句子(unicode)?

android - 难以理解如何支持多屏

c++ - 如何在 OpenCV 中将图像调整为特定大小?