老王最近将 iPhone 上的手机传到电脑上,发现很多照片的格式都是 HEIC 的,一些软件不支持打开 HEIC 格式的图片,所以就搜了下如何使用 Python 将照片批量从 HEIC 转成 JPG/PNG,大部分教程是针对 Linux 或者 Mac 的,本文记录下在 Windows 上如何实现这个照片格式的转换。
一、依赖的包
网上很多教程都是依赖 pyheif 这个包来读取 HEIC 文件的,但是这个包目前只支持 Linux 和 Mac,在 Windows 上无法安装也无法使用,于是乎在 StackOverflow 找到了一个适用于 Windows 的替换包:pillow_heif,直接用 pip 安装或者在 PyCharm 中安装即可。
二、代码分享
下面直接分享代码,安装好依赖后,改个路径就可以用:
# -*- coding: utf-8 -*-
from PIL import Image
# import pyheif
import os
import pillow_heif
import whatimage
# 循环读取HEIC格式照片,写入JPG
def recyle_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)
recyle_convert(sub_path, dst_path)
# 判断是不是文件
elif os.path.isfile(org_path):
with open(org_path, 'rb') as f:
file_data = f.read()
try:
# 判断照片格式
fmt = whatimage.identify_image(file_data)
if fmt in ['heic']:
# 读取图片
heif_file = pillow_heif.read_heif(org_path)
image = Image.frombytes(mode=heif_file.mode, size=heif_file.size, data=heif_file.data)
# 将要存储的路径及名称
path, filename = os.path.split(org_path)
name, ext = os.path.splitext(filename)
file_path = os.path.join(dst_path, '%s.jpg' % name)
print(file_path)
# 缩略图(原始图片太大了,换成1080x1440)
# image.thumbnail((1080, 1440))
# 保存图片(JPEG格式)
image.save(file_path, "JPEG")
except:
print('except')
else:
print(org_path + 'is error format!')
pass
# 主函数入口
def main():
# dst path
dst_path = 'D:\PR\素材\jpg'
if os.path.exists(dst_path) is False:
os.makedirs(dst_path)
pass
# org path
org_path = 'D:\PR\素材'
# convert
recyle_convert(org_path, dst_path)
pass
if __name__ == '__main__':
main()
pass