当前位置: 首页 > 科技观察

教你用Python快速批量转换Heic文件

时间:2023-03-16 21:05:41 科技观察

一、前言大家好,我是安国!最近打算给亲戚朋友做一批日历,但是iPhone导出的照片格式是HEIC格式,商家在线制作网站不支持这种图片格式PS:HEIC是苹果新默认的采用图像格式,可以在不损失图像质量的情况下减小图像尺寸。支持图片批量转换的网上网站很多,但安全和隐私得不到保障;如果用PS之类的软件把每张图片都删掉转换很浪费时间,效率也太低了。本文将使用Python批量实现HEIC图片文件的格式转换。2.准备工作首先,我们安装pyheif依赖包Linux和MacOS。可以通过以下链接https://pypi.org/project/pyheif/选择合适的安装方式,如果是Windows,我们只能下载whl依赖文件,使用pip命令安装下载地址:https:///www.lfd.uci.edu/~gohlke/pythonlibs/#pyheif注意:我们需要根据系统和Python版本选择对应的文件进行安装#比如本机是win10+64bit+Python3.7#Download通过以下链接下载文件:pyheif?0.6.1?cp37?cp37m?win_amd64.whlhttps://www.lfd.uci.edu/~gohlke/pythonlibs/#pyheif#然后执行虚拟环境#使用pip3命令即可安装whl文件pip3installpyheif?0.6.1?cp37?cp37m?win_amd64.whl然后安装图像处理的PIL依赖#Installationdependsonpip3installPillow3.实战一、遍历源文件夹及子文件夹,获取所有HEIC格式(不区分大小写)图片/*.heic".format(source_path))#满足条件的文件列表filelist=[]forroot,dirnames,filenamesinos.walk(source_path):forfilenameinfilenames:#filename:文件名,root:文件对应的目录#获取文件后缀名file_end=pathlib.Path(filename).suffix#文件名(不带后缀)file_name=pathlib.Path(filename).name.split(".")[-2]iffile_endin['.heic','.HEIC']:#文件的完整目录#file_path=os.path.join(root,filename)filelist.append({"filename":file_name,"filepath":os.path.join(root,filename)})returnfilelist然后遍历文件列表,使用pyheif读取文件,使用PIL转换将其转化为JPG格式的二进制图片保存到目标文件夹importpyheiffromPILimportImage#读取文件img=pyheif.read(filepath)img_bytes=Image.frombytes(mode=img.mode,size=img.size,data=img.data)#文件保存完整目录target_file_path='{}/{}_{}.jpg'.format(target_path,filename,generate_random_num(6))#Saveimg_bytes.save(target_file_path,format="jpeg")由于数量较多图片,很难读取和保存图片我t是一个耗时的IO操作。最后修改程序,采用多线程加速图像转换。另外,图片的文件名可能重名,在最后保存的文件名后面附加一个随机字符串importthreadingdefgenerate_random_num(count):"""生成随机字符串:paramcount::return:"""return''.join(随机样本('abcdefghijklmnopqrstuvwxyz',count))defconvert_heic_to_jpg(file,semaphore):"""heic格式为jpg:paramfiles::return:"""semaphore.acquire()...#FileOperation#Releasesemaphore.release()if__name__=='__main__':...#定义信号量,并发处理文件IOsemaphore=threading.BoundedSemaphore(20)forfileinfiles:t=threading.Thread(target=convert_heic_to_jpg,args=(file,semaphore))t.start()4.最后,通过以上操作,就可以快速将HEIC文件批量转换为JPG文件了。当然,如果你想转换成其他图片,比如:PNG,只需要改变PIL格式保存图片即可。