我正在使用 PIL 调整图像大小。其中大多数为 640x480 ,其中有些更大。它们大多数都在png中,但是我也有jpeg扩展名。 我想将所有图像的大小调整为32x32像素,但是我注意到使用PIL后分辨率似乎有所变化。
我发现这是一个典型的问题,在保存图像时通常会找出一个问题。 我尝试使用不同的“ quality ”值,我阅读了文档,尝试使用不同的参数,例如“ subsampling ”,并尝试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)
在这里,我的代码获得了粒状输出
如何将图像调整为较小的尺寸,但要保持很好的分辨率?
答案 0 :(得分:1)
无法进行所需的图像转换。当您尝试将光栅图像调整为较小的像素尺寸时,您必须对其进行缩采样或根本不对其进行采样(简单调整大小)。即使您可以保留分辨率(图像中的像素总数),但由于像素一次只能代表一种颜色(至少在基于子像素的显示器(如显示器)中),并且最终图像仅具有1024的分辨率它们,并且原始图像中的细节远不如这些数量的像素所代表的那样,这将始终导致最终图像的质量(具有伪像的像素化图像)的质量大大降低。
但这不是一般情况,因为它在很大程度上取决于图像代表的是哪种细节。如果图像不复杂(不包含很多颜色变化),则可以将其调整为质量较低的版本,而不会丢失细节。
746x338尺寸图片
上一张图片的32x32尺寸版本
两个图像之间几乎没有区别(它们的物理尺寸除外),即使它们的尺寸相差很大。原因是这些是在大范围内包含相同像素值的非复杂图像,因此可以轻松调整其大小而不会造成细节损失。
现在,如果对复杂图像尝试相同的过程(如您在问题中给出的过程),结果将是像素化图像。
解决方案:-
您可以选择最终图像中的大尺寸值 (比32x32还要多),以便保持图像质量。
创建与图像等效的Vector,即分辨率 独立的,可以调整为更大或更小的物理尺寸 而不影响图像质量。
PS:-
请勿保存扩展名为.png
的{{1}}图像,因为jpg是一种有损压缩技术(大部分情况下),这样会导致最终图像的质量较低,即使没有对其进行操纵。
答案 1 :(得分:0)
减小尺寸无法使图像保持清晰,因为它们需要像素,而不能同时保持两者
在这种情况下,可以使用不同的过滤器。参见下面的代码
from PIL import Image
import os
import PIL
filters = [PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC, PIL.Image.ANTIALIAS]
grey_scale = False
i = 0
for filter in filters:
im = Image.open("./image.png")
img = im.resize((32, 32), filter)
if grey_scale is True:
img = img.convert('L') # to resize image in gray scale
i = i + 1
img.save("./" + str(i) + '.jpg', "JPEG", quality=100)
接下来,您不使用resize
来保持宽高比。因此,不要使用resize
方法,而要同时保留纵横比
thumbnail
from PIL import Image
import os
import PIL
filters = [PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC, PIL.Image.ANTIALIAS]
grey_scale = False
i = 5
for filter in filters:
im = Image.open("./image.png")
img = im.thumbnail((32, 32), filter)
img = im
if grey_scale is True:
img = img.convert('L') # to resize image in gray scale
i = i + 1
img.save("./" + str(i) + '.jpg', "JPEG", quality=100)