gpt4 book ai didi

Python图像库(PIL),如何将图像压缩成所需的文件大小?

转载 作者:太空狗 更新时间:2023-10-29 20:46:06 25 4
gpt4 key购买 nike

我要求压缩任何文件大小小于 500kb 的上传图片,我在谷歌上搜索过,我能看到的是:

 >>> foo = foo.resize((160,300),Image.ANTIALIAS)
>>> foo.save("path\\to\\save\\image_scaled.jpg",quality=95)

如果我采用这种方法,我将不得不检查图像在压缩后是否小于 500kb,如果不是,则采用较低的质量和尺寸。

有更好的方法吗?

最佳答案

JPEG 压缩无法事先预测。你描述的方法,压缩&测量&再试,是我知道的唯一方法。

您可以尝试压缩一些具有不同质量设置的典型图像,以了解最佳起点,以及猜测设置更改将如何影响大小的方法。这将使您在无需太多迭代的情况下将最佳尺寸归零。

您还可以将一个类似文件的对象传递给 save 函数,它不会费心写入磁盘,只计算字节数。确定最佳设置后,您可以将其再次保存到实际文件中。

编辑:这是一个合适的字节计数文件对象的实现。保存后只需检查大小即可。

class file_counter(object):
def __init__(self):
self.position = self.size = 0

def seek(self, offset, whence=0):
if whence == 1:
offset += self.position
elif whence == 2:
offset += self.size
self.position = min(offset, self.size)

def tell(self):
return self.position

def write(self, string):
self.position += len(string)
self.size = max(self.size, self.position)

编辑 2:这是一个二分搜索,使用上面的方法以最少的尝试次数获得最佳的质量

def smaller_than(im, size, guess=70, subsampling=1, low=1, high=100):
while low < high:
counter = file_counter()
im.save(counter, format='JPEG', subsampling=subsampling, quality=guess)
if counter.size < size:
low = guess
else:
high = guess - 1
guess = (low + high + 1) // 2
return low

关于Python图像库(PIL),如何将图像压缩成所需的文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13407717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com