HEIC/HEIF 是苹果自 iOS 11 起在 iPhone 上默认采用的照片格式,它用 HEVC 编码,在同等画质下体积往往只有 JPEG 的一半。但这份「高效」是带条件的:解码需要 HEVC 支持,老系统、老软件经常直接打不开,于是「HEIC 转 PDF」成了一个高频需求。

因此处理 HEIC 的第一步往往不是「转 PDF」,而是「先把它解码成通用格式」,再谈后续。
| 环节 | 风险 | 处理方式 |
|---|---|---|
| 解码 | 无 HEVC 解码器直接失败 | 用 libheif / pillow-heif 解码 |
| 方向 | EXIF 旋转标记被忽略,图片躺着 | 按 EXIF Orientation 自动纠正 |
| 色彩 | 广色域映射到 sRGB 后偏色 | 显式做色彩空间转换 |
| 页面 | 多图合成时尺寸不一 | 统一到同一画布或按原尺寸落页 |
「方向」是 HEIC 转 PDF 最常被忽略的一环。手机竖拍的照片通常靠 EXIF 标记旋转,若转换时没读这个标记,导出的 PDF 里照片会横着躺。
from PIL import Image, ImageOps
import pillow_heif, glob
pillow_heif.register_heif_opener() # 让 PIL 支持 HEIC
pages = []
for f in sorted(glob.glob("heic_in/*.heic")):
im = Image.open(f)
im = ImageOps.exif_transpose(im) # 按 EXIF 自动纠正方向
pages.append(im.convert("RGB"))
pages[0].save("album.pdf", "PDF", save_all=True,
append_images=pages[1:], resolution=150.0)
print("pages:", len(pages))
两个关键点:register_heif_opener() 解决「读懂 HEIC」,exif_transpose() 解决「方向正确」。少了任何一个,输出都不对。
重点看方向是否正确、颜色是否偏黄偏灰、多页是否按预期顺序排列。手机相册的拍摄顺序可能和文件名字典序不同,涉及「按时间排列」的需求,应按 EXIF 拍摄时间排序,而不是文件名。
HEIC 转 PDF 的本质是「先解码、再纠正、后合成」:用支持 HEIF 的解码器把图读进来,按 EXIF 修正方向与时间,再按用途设定分辨率与压缩。把这三步串成流水线,手机照片就能稳定、批量地变成可分享的 PDF。
标签: PDF转换 技术升级 效率提升