IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 每日小技巧~教你如何用 Python 快速批量转换 HEIC 文件 -> 正文阅读

[Python知识库]每日小技巧~教你如何用 Python 快速批量转换 HEIC 文件

最近打算做一批日历给亲朋好友,但是从 iPhone 上导出的照片格式是?HEIC?格式,而商家的在线制作网站不支持这种图片格式

PS:HEIC 是苹果采用的新的默认图片格式,它能在不损失图片画质的情况下,减少图片大小

有很多在线网站支持图片批量转换,但是安全隐私又没法得到保证;如果使用 PS 等软件去一张张转换,浪费时间的同时效率太低

本篇文章将使用 Python 批量实现 HEIC 图片文件的格式转换

2. 准备

首先,我们安装?pyheif?依赖包

Linux 和 Mac OS?可以通过下面链接选择合适的方式进行安装

https://pypi.org/project/pyheif/

如果是 Windows,我们只能下载 whl?依赖文件,使用 pip 命令进行安装

下载地址:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyheif

注意:我们需要根据系统及 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

3.?实战

首先,遍历源文件夹及子文件夹,获取所有 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()

4. 最后

通过上面的操作就可以快速将 HEIC 文件批量转换为 JPG 文件,当然如果想转为其他图片,比如:PNG,只需要更改 PIL 保存图片的格式即可

如果你觉得文章还不错,请大家?点赞、分享、留言?下,因为这将是我持续输出更多优质文章的最强动力!

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:26:04  更:2021-12-24 18:26:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:42:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码