Python脚本将heic格式转化为jpg

Sabthever

  个人博客相册图片长时间加载不出来,heic格式图片背大锅。

  事情是这样的,我的相册在很长一段时间打开都是这样的:

image-20251010151914231

  我把放在相册中的图片减少了一半,发现还是一点都不会加载。那可能虽然有数量的问题,但是还是有其他更主要的问题。

  然后我就注意到了图片好像少了几张,我查看我的资源文件发现,少的这几张都是heic格式的图片。这里我网上找了一段:

1
HEIC(高效图像容器)是苹果公司基于HEIF(高效图像文件格式)和HEVC(高效视频编码)技术开发的一种图像存储格式。

  这个格式呢,浏览器是不兼容的,我在想是不是就是这个导致的加载缓慢。然后我把heic格式的图片都去掉了,结果果然是这个原因,虽然由于图片多,没有做异步出现还是稍微有点慢,但是起码加载出来了。

  这样就简单了,只要把heic格式的图片转为jpg格式的就好了。

  但是!

  如果只是把heic后缀改为jpg的话,在hexo g的时候,静态图片还会变为heic形态。这是因为图片的二进制文件,在标注文件格式的二进制码中,仍然是heic格式,这就需要工具转成jpg格式。

  这里我给大家先找了个在线转化器:

  迅捷图片转化器:https://www.xunjietupian.com/heic/

  除此之外,下面我提供一个python的批量转化文件夹中heic图片格式的脚本。该脚本可以将指定的目录以及其子目录下所有heic图片转化为jpg格式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python3
"""
python -m venv venv
activate激活环境后
依赖安装:pip install pillow-heif


"""
import argparse
import os
from pathlib import Path

from pillow_heif import register_heif_opener
from PIL import Image

# 让 Pillow 能直接打开 .heic
register_heif_opener()


def heic_to_jpg(heic_path: Path, quality: int = 95, delete_after: bool = False) -> bool:
"""单文件转换,成功返回 True"""
jpg_path = heic_path.with_suffix(".jpg")
try:
with Image.open(heic_path) as im:
# 转换 RGB 模式(去掉 alpha 通道)
rgb = im.convert("RGB")
rgb.save(jpg_path, format="JPEG", quality=quality, optimize=True)
if delete_after:
heic_path.unlink()
print(f"[OK] {heic_path} -> {jpg_path}")
return True
except Exception as e:
print(f"[ERR] {heic_path} : {e}")
return False


def walk_convert(root: Path, quality: int, delete_after: bool):
"""递归遍历"""
total = 0
ok = 0
for heic in root.rglob("*.heic"):
total += 1
if heic_to_jpg(heic, quality, delete_after):
ok += 1
print(f"\n全部完成:{ok}/{total} 个文件转换成功")


def main():
parser = argparse.ArgumentParser(description="递归 .heic → .jpg 真正转换")
parser.add_argument("root", help="要扫描的根目录")
parser.add_argument("--delete", action="store_true", help="转换后删除原 .heic")
parser.add_argument("--quality", type=int, default=95, help="JPEG 质量 1-100,默认 95")
args = parser.parse_args()

root = Path(args.root).expanduser().resolve()
if not root.is_dir():
print("路径不存在或非目录:", root)
return

walk_convert(root, args.quality, args.delete)


if __name__ == "__main__":
main()

  这个脚本需要预先安装pillow-heif包:pip install pillow-heif

具体执行方式如下:

1
2
3
4
5
递归地把目录下所有 .heic → .jpg
用法:
python heic2jpg.py 根目录 [--delete] [--quality 95]
--delete 转换成功后删除原 .heic 文件(可选)
--quality 输出 JPEG 质量 1-100,默认 95

执行过程如下:

image-20251010154121504

  • 标题: Python脚本将heic格式转化为jpg
  • 作者: Sabthever
  • 创建于 : 2025-10-10 15:10:38
  • 更新于 : 2025-10-10 15:46:53
  • 链接: https://sabthever.cn/2025/10/10/technology/blog/heic格式转化为jpg/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
目录
Python脚本将heic格式转化为jpg