吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1054|回复: 6
收起左侧

[Python 原创] 使用Python借助pillow-heif库把HEIC格式图片转化为JPEG格式图片

[复制链接]
devSteven 发表于 2024-8-22 15:04
本帖最后由 devSteven 于 2024-8-23 14:25 编辑
  • 背景介绍
    HEIC,是iOS 11更新后,iPhone 7及其后硬件,在拍摄照片时的默认图像存储格式。全称为High Efficiency Image Format,是一种用于图像存储的格式。它是由苹果公司开发的,主要用于iOS系统,如iPhone和iPad。HEIC格式于2011年首次推出,经过多年的发展和完善,现在已经被广泛使用。

  • HEIC格式的优势

    • 1.更高的压缩比:与JPEG格式相比,HEIC格式具有更高的压缩比,能够在不损失图像质量的情况下,将图片大小减少50%-60%。这对于存储空间有限的移动设备来说,无疑是非常重要的。

    • 2.更低的功耗:由于HEIC格式的压缩算法更加高效,所以在处理图片时,能够降低设备的功耗,延长电池寿命。

    • 3.更快的加载速度:由于HEIC格式的高效性,使用该格式的图片在加载时速度更快,能够为用户提供更好的浏览体验。

尽管HEIC格式在iOS设备上表现出色,但是它并不被所有设备所支持。特别是Windows系统和一些较老的Android设备,可能无法直接打开HEIC格式的图片。此时,用户需要安装相应的解码器或使用第三方工具进行转换。

作为会Python的技术宅怎么会让第三方带广告软件给石化了?不存在的。

下面咱们用Python代码借助 pillow_heif类库,来把HEIC格式的图片解码并转换HEIC格式的图片为JPEG格式的图片。

from PIL import Image
import pillow_heif

def heic_to_jpg(input_file, output_file):
    heif_file = pillow_heif.read_heif(input_file)
    image = Image.frombytes(
        heif_file.mode, 
        heif_file.size, 
        heif_file.data,
        "raw",
        heif_file.mode,
        heif_file.stride,
    )
    image.save(output_file, "JPEG")

# 调用方式
heic_to_jpg("input.HEIC", "output.jpg")

通过上面的代码,咻的一下图片就转出来了。

接下来可能我手头不只有一张图片需要转换,我有一个文件夹的图片都需要去转换成JPG,欻欻欻。。。。代码来了:

from PIL import Image
import pillow_heif
import os

def recycle_convert(org_path, dst_path):
   if os.path.isdir(org_path):
        file_list= os.listdir(org_path)
        for idx, file in enumerate(file_list):
            sub_path = os.path.join(org_path, file)
            recycle_convert(sub_path,dst_path)
   elif os.path.isfile(org_path):
        path,filename=os.path.split(org_path)
        name,ext=os.path.splitext(filename)
        if ext == ".HEIC" or ext == ".heic":
            heif_file = pillow_heif.read_heif(org_path)
            image = Image.frombytes(
                heif_file.mode, 
                heif_file.size, 
                heif_file.data,
                "raw",
                heif_file.mode,
                heif_file.stride,
            )
            file_path=os.path.join(dst_path,f"{name}.jpg")
            print(file_path)
            image.save(file_path,"JPEG")
        else:
            print(f"{org_path}is error format!")
        pass

def main():
    #目标图片文件夹路径
    dst_path = "D:\output"
    if os.path.exists(dst_path) is False:
        os.makedirs(dst_path)
        pass
    #原始图片文件夹路径
    org_path = "D:\input"
    recycle_convert(org_path,dst_path)
    pass

if __name__ == '__main__':
    main();

PS:
pillow-heif 支持Python 3.8至3.13版本,以及Windows、macOS(包括M1芯片)、Linux和Alpine Linux系统。
安装它 pip install -U pillow-heif

想要学习更多的pillow-heif使用方法还是去阅读官方文档吧。

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
xinxiu + 1 + 1 用心讨论,共获提升!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dickyuan 发表于 2024-8-22 18:04
为什么 不把代码写成两个功能 一个是便利当前目录下所有文件,识别后缀后转换成JPG,
另一个功能就是  拖动图片到EXE上,可以直接转换图片 这样也很方便。
这两种方法都合成一个EXE打包 就会很方便
xixicoco 发表于 2024-8-22 17:55
aiguohou 发表于 2024-8-22 18:00
 楼主| devSteven 发表于 2024-8-23 14:31
dickyuan 发表于 2024-8-22 18:04
为什么 不把代码写成两个功能 一个是便利当前目录下所有文件,识别后缀后转换成JPG,
另一个功能就是  拖 ...

打包的软件可太多了,发出来仅仅是为了技术交流学习以及代码的改进。
我用过的XnConvert这个软件就很不错了,该有的功能都有了。
logga 发表于 2024-8-24 15:10
其实没必要这么费事  FileConverter一点就能解决
JARK006 发表于 2024-8-25 01:32
可以试试我这个看图软件,支持heif,avif等新格式 https://www.52pojie.cn/thread-1956185-1-1.html
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 06:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表