苹果设备现在拍照的文件都是 .heic
格式,文件占的存储空间确实更小了,但导出到Windows查看,打开图片所在文件夹就被会卡到不行,为了方便整理图片,可以考虑将图片批量转为 png
、jpg
等格式。
网上很多网站提供在线转换,这对于大量图片来说肯定不适用,而且个人图片还存在隐私问题,所以考虑用Python来做这个事情。
一、格式详解
HEIF
和 HEIC
的介绍请看这篇文章:【HEIF/heic图片文件解析】
简单来说,HEIF
是一个容器的图片格式,当前包含的编码 HEVC
(256) 和 H.264/MPEG-4 AVC
。
在苹果设备采用的HEIC
就是 HEIF
采用 HEVC
编码的一种,文件后缀为 *.heic
。
二、库
如果想自己去提取HEIF
文件中的图片,一定会使用到诺基亚的C++库【nokiatech/heif】,我们用Python也是要用到这个库,但我们不直接安装这个库。
pyheif
这个库不能通过 pip install pyheif
来安装,提示说要C++编译环境。
可以通过下载whl文件,然后本地安装
pyheif依赖库下载
我当前的环境是 Win10 + Python3.7 ,所以下载【pyheif‑0.6.1‑cp37‑cp37m‑win_amd64.whl】
三、安装依赖
1 2
| pip install pyheif‑0.6.1‑cp37‑cp37m‑win_amd64.whl pip3 install Pillow
|
四、代码
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
| import os import pyheif from PIL import Image
def get_dir_heic_files(source_path): filelist = [] fileList = os.listdir(source_path) for file in fileList: if(file.find('.heic') > 0): names = file.split(".") filelist.append({ "filename": names[0], "filepath": os.path.join(source_path, file) }) return filelist
def heic2Png(src_path,target_path): print(src_path,'->',target_path) img_heic = pyheif.read(src_path) img_heic_bytes = Image.frombytes(mode=img_heic.mode, size=img_heic.size, data=img_heic.data) img_heic_bytes.save(target_path, format="png") if __name__ == '__main__': source_dir = "D://test/" target_dir = "D://test/png" if not os.path.exists(target_dir): os.makedirs(target_dir) files = get_dir_heic_files(source_dir) for file in files: target_file_path = '{}/{}.png'.format(target_dir,file['filename']) heic2Png(file['filepath'],target_file_path)
|