Python 对于jpeg以外的格式,将图像字节大小减小为给定值

Python 对于jpeg以外的格式,将图像字节大小减小为给定值,python,image-processing,python-imaging-library,Python,Image Processing,Python Imaging Library,在这篇文章之后,我成功地将图像的字节大小减少到了所需的级别,但问题是,我只成功地将其用于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:

在这篇文章之后,我成功地将图像的字节大小减少到了所需的级别,但问题是,我只成功地将其用于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

        ...
def获取最高可接受质量(图像、文件名、目标):
q_最小值,q_最大值=1,96
#最高可接受的质量
q_acc=-1

而q_min
JPEG
是有损的。这意味着允许更改图像像素以减小文件大小,即以绝对精度换取大小和传输时间的减少。它试图利用我们看待事物的方式,使质量损失不那么明显。出于技术上的好奇,我指的是“色度二次采样”,即对颜色信息进行二次采样,因为人眼对亮度变化比颜色变化和“量化”更敏感由于人眼更善于在更广阔的区域看到变化,而不是在一个小的、密集的、混乱的区域中做出成千上万的变化,因此高频变化的权重更小或被丢弃——见JPEG上的文章


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

因此,这种大小减少的过程仅适用于JPEG格式,对吗?能否请您提供一个简短列表,列出这种质量降低过程对其有意义的格式?这是一个巨大的折衷。如果你想与网络兼容,你必须使用JPEG、PNG、GIF。GIF只能显示256色,不能显示16位。BMP是过时的,没有很好的文档记录,而且不适合压缩照片。蒂芙很全面,但他努力做到对所有男人都一样。PNG通常很好,但对浮动数据没有好处,对照片也不理想。JPEG对于照片来说是很棒的,但是对于计算机生成的(块状)图形来说却是垃圾。你可以试试HEIC,它可以很好地压缩,这也是苹果公司所采用的,但是你会失去很多网络兼容性。。。您可以自己减少PNG中的颜色数量,以使其更小。@Aurèle这里有一些有趣且相关的想法。。。