京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者:星安果
来源: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 保存图片的格式即可
CDA学员免费下载查看报告全文:2026全球数智化人才指数报告【CDA数据科学研究院】.pdf
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在互联网运营、产品优化、用户增长等领域,次日留存率是衡量产品价值、用户粘性与运营效果的核心指标,更是判断新用户是否认可产 ...
2026-05-09相关性分析是数据分析领域中用于探究两个或多个变量之间关联强度与方向的核心方法,广泛应用于科研探索、商业决策、医疗研究、社 ...
2026-05-09 数据分析师八成以上的时间在和数据表格打交道,但许多人拿到Excel后习惯性地先算、先分析,结果回头发现漏了一列关键数据, ...
2026-05-09在数据驱动运营的时代,指标是连接业务目标与实际行动的核心桥梁,是企业解读业务现状、发现问题、预判趋势的“量化标尺”。一套 ...
2026-05-08在存量竞争日趋激烈的商业时代,“以客户为中心”早已从口号落地为企业运营的核心逻辑。而客户画像作为打通“了解客户”与“服务 ...
2026-05-08 很多数据分析师每天与Excel打交道,但当被问到“什么是表格结构数据”“它和表结构数据有什么区别”“表格结构数据有哪些核 ...
2026-05-08在数据分析、计量研究等场景中,回归分析是探究变量间量化关系的核心方法,无论是简单的一元线性回归,还是复杂的多元线性回归、 ...
2026-05-07在数据分析、计量研究等场景中,回归分析是探究变量间量化关系的核心方法,无论是简单的一元线性回归,还是复杂的多元线性回归、 ...
2026-05-07 很多数据分析师画过趋势图、做过业绩预测,但当被问到“这个月销售额增长20%,到底是长期趋势自然增长,还是促销活动的短期 ...
2026-05-07在数字化时代,商业竞争的核心已从“经验驱动”转向“数据驱动”,越来越多的企业意识到,商业分析不是简单的数据统计与报表呈现 ...
2026-05-06在Excel数据透视表的实操中,“引用”是连接透视表与公式、辅助数据的核心操作,而相对引用作为最基础、最常用的引用方式,其设 ...
2026-05-06 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-05-06在Excel数据分析中,数据透视表是汇总、整理海量数据的高效工具,而公式则是实现数据二次计算、逻辑判断的核心功能。实际操作中 ...
2026-04-30Excel透视图是数据分析中不可或缺的工具,它能将透视表中的数据快速可视化,帮助我们直观捕捉数据规律、呈现分析结果。但在实际 ...
2026-04-30 很多数据分析师能熟练地计算指标、搭建标签体系,但当被问到“画像到底在解决什么问题”“画像和标签是什么关系”“画像如何 ...
2026-04-30在中介效应分析中,人口统计学变量(如年龄、性别、学历、收入、职业等)是常见的控制变量或调节变量,其处理方式直接影响分析结 ...
2026-04-29在SQL数据库实操中,日期数据的存储与显示是高频需求,而“数字日期”(如20240520、20241231、45321)是很多开发者、数据分析师 ...
2026-04-29 很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当 ...
2026-04-29在手游行业竞争日趋白热化的当下,“流量为王”早已升级为“留存为王”,而付费用户留存率更是衡量一款手游盈利能力、运营质量的 ...
2026-04-28在日常MySQL数据库运维与开发中,经常会遇到“同一台服务器上,两个不同数据库(以下简称“源库”“目标库”)的表数据需要保持 ...
2026-04-28