我正在使用 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)
这里我有通过我的代码获得的颗粒状输出
我怎样才能将我的图片调整得更小,同时保持很好的分辨率?
最佳答案
您想要的那种图像转换是不可能的。当您尝试将光栅图像调整为较低的像素尺寸时,您必须对其进行下采样,或者根本不对其进行采样(简单调整大小)。即使您可以保留分辨率(图像中的像素总数),但仍然因为一个像素一次可以代表一种颜色(至少在基于子像素的显示器中,如显示器),并且您的最终图像只有 1024它们,并且原始图像中的细节远远超过这些像素数量可以表示的细节,这总是会导致最终图像中的质量相当低(带有伪影的像素化图像)。
但这不是一般情况,因为这在很大程度上取决于图像所代表的细节类型。如果图像不复杂(不包含很多颜色变化),则可以将其大小调整为质量相当低的版本,而不会丢失细节。
746x338 尺寸图片
上一张图片的 32x32 尺寸版本
这两个图像之间几乎没有区别(除了它们的物理尺寸),即使它们的尺寸有很大不同。原因是这些是在大范围内包含相同像素值的非复杂图像,这使得在不损失细节的情况下更容易调整它们的大小。
现在,如果在一张复杂的图像上尝试相同的过程,就像您在问题中给出的那样,结果将是一张像素化图像。
解决方案:-
您可以在最终图像中选择较大的尺寸值 (比 32x32 多很多)如果你想保持图像质量。
创建一个 Vector 等效于您的图像,即分辨率 独立的,可以调整到更大/更小的物理尺寸 不影响图像质量。
附注:-
不要保存带有 .jpg
扩展名的 .png
图像,因为 jpg 是一种有损压缩技术(大部分情况下),这会导致最终质量较低图像,然后是原始图像,即使没有对其进行任何处理。
关于image - 使用 PIL (Pillow) 和 Image 但保持良好的分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56278307/