老王最近将 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