
作者:星安果
来源:AirPython
大家好,我是安果!
最近打算做一批日历给亲朋好友,但是从 iPhone 上导出的照片格式是 HEIC 格式,而商家的在线制作网站不支持这种图片格式
PS:HEIC 是苹果采用的新的默认图片格式,它能在不损失图片画质的情况下,减少图片大小
有很多在线网站支持图片批量转换,但是安全隐私又没法得到保证;如果使用 PS 等软件去一张张转换,浪费时间的同时效率太低
本篇文章将使用 Python 批量实现 HEIC 图片文件的格式转换
首先,我们安装 pyheif 依赖包
Linux 和 Mac OS 可以通过下面链接选择合适的方式进行安装
https://pypi.org/project/pyheif/
如果是 Windows,我们只能下载 whl 依赖文件,使用 pip 命令进行安装
注意:我们需要根据系统及 Python 版本选择对应的文件进行安装
# 比如,本机是win10+64位 + Python3.7
# 通过下面链接下载文件:pyheif‑0.6.1‑cp37‑cp37m‑win_amd64.whl
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyheif
# 然后进行虚拟环境
# 使用pip3命令安装whl文件
pip3 install pyheif‑0.6.1‑cp37‑cp37m‑win_amd64.whl
然后,安装 PIL 依赖,用于图片处理
# 安装依赖
pip3 install Pillow
首先,遍历源文件夹及子文件夹,获取所有 HEIC 格式(不区分大小写)的图片
import pathlib
import os
def get_all_heic_imgs():
"""
获取所有heic格式的图片
:return:
"""
# heif_image_paths = glob.glob(r"{}/*.heic".format(source_path))
# 满足条件的文件列表
filelist = []
for root, dirnames, filenames in os.walk(source_path):
for filename in filenames:
# filename:文件名、root:文件对应的目录
# 获取文件后缀名
file_end = pathlib.Path(filename).suffix
# 文件名(不带后缀)
file_name = pathlib.Path(filename).name.split(".")[-2]
if file_end in ['.heic', '.HEIC']:
# 文件的完整目录
# file_path = os.path.join(root, filename)
filelist.append({
"filename": file_name,
"filepath": os.path.join(root, filename)
})
return filelist
然后,遍历文件列表,使用 pyheif 读取文件,使用PIL 转为二进制图片,以 JPG 格式保存到目标文件夹下
import pyheif
from PIL import Image
# 读取文件
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))
# 保存
img_bytes.save(target_file_path, format="jpeg")
由于图片数目很多,图片读取、图片保存都是耗时的 IO 操作,最后对程序进行改造,利用多线程加快图片转换
另外,图片可能会存在文件名重名,最后保存的文件名追加了一个随机的字符串
import threading
def generate_random_num(count):
"""
产生一段随机的字符串
:param count:
:return:
"""
return ''.join(random.sample('abcdefghijklmnopqrstuvwxyz', count))
def convert_heic_to_jpg(file, semaphore):
"""
heic格式转jpg
:param files:
:return:
"""
semaphore.acquire()
...
#文件操作
# 释放
semaphore.release()
if __name__ == '__main__':
...
# 定义信号量,并发处理文件IO
semaphore = threading.BoundedSemaphore(20)
for file in files:
t = threading.Thread(target=convert_heic_to_jpg, args=(file, semaphore))
t.start()
通过上面的操作就可以快速将 HEIC 文件批量转换为 JPG 文件,当然如果想转为其他图片,比如:PNG,只需要更改 PIL 保存图片的格式即可
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
2025 年,数据如同数字时代的 DNA,编码着人类社会的未来图景,驱动着商业时代的运转。从全球互联网用户每天产生的2.5亿TB数据, ...
2025-06-052025 年,数据如同数字时代的 DNA,编码着人类社会的未来图景,驱动着商业时代的运转。从全球互联网用户每天产生的2.5亿TB数据, ...
2025-05-27CDA数据分析师证书考试体系(更新于2025年05月22日)
2025-05-26解码数据基因:从数字敏感度到逻辑思维 每当看到超市货架上商品的排列变化,你是否会联想到背后的销售数据波动?三年前在零售行 ...
2025-05-23在本文中,我们将探讨 AI 为何能够加速数据分析、如何在每个步骤中实现数据分析自动化以及使用哪些工具。 数据分析中的AI是什么 ...
2025-05-20当数据遇见人生:我的第一个分析项目 记得三年前接手第一个数据分析项目时,我面对Excel里密密麻麻的销售数据手足无措。那些跳动 ...
2025-05-20在数字化运营的时代,企业每天都在产生海量数据:用户点击行为、商品销售记录、广告投放反馈…… 这些数据就像散落的拼图,而相 ...
2025-05-19在当今数字化营销时代,小红书作为国内领先的社交电商平台,其销售数据蕴含着巨大的商业价值。通过对小红书销售数据的深入分析, ...
2025-05-16Excel作为最常用的数据分析工具,有没有什么工具可以帮助我们快速地使用excel表格,只要轻松几步甚至输入几项指令就能搞定呢? ...
2025-05-15数据,如同无形的燃料,驱动着现代社会的运转。从全球互联网用户每天产生的2.5亿TB数据,到制造业的传感器、金融交易 ...
2025-05-15大数据是什么_数据分析师培训 其实,现在的大数据指的并不仅仅是海量数据,更准确而言是对大数据分析的方法。传统的数 ...
2025-05-14CDA持证人简介: 万木,CDA L1持证人,某电商中厂BI工程师 ,5年数据经验1年BI内训师,高级数据分析师,拥有丰富的行业经验。 ...
2025-05-13CDA持证人简介: 王明月 ,CDA 数据分析师二级持证人,2年数据产品工作经验,管理学博士在读。 学习入口:https://edu.cda.cn/g ...
2025-05-12CDA持证人简介: 杨贞玺 ,CDA一级持证人,郑州大学情报学硕士研究生,某上市公司数据分析师。 学习入口:https://edu.cda.cn/g ...
2025-05-09CDA持证人简介 程靖 CDA会员大咖,畅销书《小白学产品》作者,13年顶级互联网公司产品经理相关经验,曾在百度、美团、阿里等 ...
2025-05-07相信很多做数据分析的小伙伴,都接到过一些高阶的数据分析需求,实现的过程需要用到一些数据获取,数据清洗转换,建模方法等,这 ...
2025-05-06以下的文章内容来源于刘静老师的专栏,如果您想阅读专栏《10大业务分析模型突破业务瓶颈》,点击下方链接 https://edu.cda.cn/g ...
2025-04-30CDA持证人简介: 邱立峰 CDA 数据分析师二级持证人,数字化转型专家,数据治理专家,高级数据分析师,拥有丰富的行业经验。 ...
2025-04-29CDA持证人简介: 程靖 CDA会员大咖,畅销书《小白学产品》作者,13年顶级互联网公司产品经理相关经验,曾在百度,美团,阿里等 ...
2025-04-28CDA持证人简介: 居瑜 ,CDA一级持证人国企财务经理,13年财务管理运营经验,在数据分析就业和实践经验方面有着丰富的积累和经 ...
2025-04-27