在 python 中将 heic 更改为 jpeg 时文件大小不同

Different filesize when changing heic to jpeg in python

我可以使用 pyheic 库在 python 中轻松地将 HEIC 转换为 JPEG。 但是当它转换为 JPEG 时,文件大小会变大。 (大约 4 次)。我可以减小保存文件的大小吗?

如何获取 base64 编码的字符串而不是保存 JPEG 图片?

我的代码如下:

# -*- coding: utf-8 -*-
import sys 
import os
from PIL import Image # pip3 install pillow
import pyheif  # pip3 install pyheif 


def call(oriPath, defPath):
    try:
        # if defPath is webp or heic
        fileType = oriPath.split(".")[-1]
        if fileType == "heic":
            heif_file = pyheif.read(oriPath)
            image = Image.frombytes(
                heif_file.mode,
                heif_file.size,
                heif_file.data,
                "raw",
                heif_file.mode,
                heif_file.stride,
            )

        image.save(defPath, "JPEG")

    except:
        print(False)
        return

    print(True)

由于您正在从一种数据类型转换为另一种数据类型,因此格式正在发生变化。我对 HEIC 不太熟悉,但它可能只是一个较小的文件大小,具有您为 JPEG 设置的压缩参数。

wikipedia 对此有如下说法

A HEIF image using HEVC requires less storage space than the equivalent quality JPEG.

因此,除非您想降低质量,否则甚至可能无法获得更小的图像(注意:我不知道 HEIC/HEIF 是什么类型)。

至于 base64 编码的字符串,您可以只读取二进制数据并将其转换为 base64,每个问题:Python: How do I convert from binary to base 64 and back?