将图像字节大小减小到 jpeg 以外的格式的给定值



在这篇文章之后,我成功地将图像的字节大小减小到所需的级别,但问题是我成功地只对JPEG这样做了。当我尝试为png执行此操作时,该函数不会执行预期的操作:

def get_highest_acceptable_quality(image, filename, target):
q_min, q_max = 1, 96
# Highest acceptable quality found
q_acc = -1
while q_min <= q_max:
m = math.floor((q_min + q_max) / 2)
buffer = BytesIO()
image.save(buffer, format="png", compress_level=m) 
s = buffer.getbuffer().nbytes # the s value is always the same for all values of m
...

奇怪的是,无论m的值是多少,s 的值都保持不变。JPEG的情况并非如此(在这里整个功能都可以正常工作(。我完全迷失了,因为我不是图像处理方面的专家。有什么帮助吗?

JPEG是有损的。这意味着允许更改图像像素以减小文件大小,即以绝对精度换取尺寸和传输时间的减小。它试图利用我们看待事物的方式,以使质量损失不那么明显。对于技术好奇的人,我指的是"色度子采样",即对颜色信息进行子采样,因为人眼对亮度变化比对颜色变化更敏感,以及"量化">,其中高频变化的权重较小或被丢弃,因为人眼更善于看到更广泛区域的变化,而不是在很小的范围内辨别数千种变化。 密集,混乱的区域 - 请参阅维基百科关于JPEG的文章。

另一方面,PNG始终是无损的。它不能丢弃信息或更改像素以使文件大小更小。最终,这意味着,对于某些图像类型,它无法像JPEG那样减小文件大小。

相关内容

最新更新