基于pyqt5实现一个精美界面heic图片转换器源码+编译好exe程序

基于pyqt5实现一个精美界面heic图片转换器源码+编译好exe程序

HEIC 图片转换器

一款基于PyQt5开发的桌面 GUI 工具,用于将 HEIC/HEIF 格式图片批量转换为 JPG 格式。支持拖放操作、批量重命名、元数据保留、质量调节等功能,操作简单、界面友好。

在这里插入图片描述

目录


算法原理

1. HEIC 格式解码

HEIC/HEIF 是苹果设备默认使用的高效图像格式,Python标准库的 Pillow 默认不支持解码。本项目通过 pillow_heif 库的 register_heif_opener() 函数,将 HEIC 解码器注册到Pillow中,使 Image.open() 能够直接读取 HEIC 文件:

from pillow_heif import register_heif_opener
register_heif_opener()
2. 图像转换核心流程

转换过程位于 [ConversionWorker.convert_image](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L154),主要步骤为:

  1. 使用 PIL.Image.open() 打开 HEIC 文件;

  2. 若启用"保留元数据"选项,通过 img._getexif() 读取 EXIF 信息(包含拍摄时间、相机型号、GPS 等);

  3. 调用 img.convert('RGB') 将图像转换为 RGB 色彩模式(JPEG 不支持透明通道);

  4. 使用 img.save(output_path, 'JPEG', quality=..., exif=...) 保存为 JPG,quality 参数控制压缩质量(10-100)。

3.多线程异步处理

为保证转换过程中界面不卡顿,转换任务在独立线程中执行:

  • ImageConverter 作为控制器,负责创建并管理工作线程;

  • ConversionWorker(QThread) 继承自 QThread ,在 run() 方法中遍历文件列表逐个转换;

  • 通过 Qt 信号机制( pyqtSignal )向主线程回传进度、状态、完成结果,实现线程间通信;

  • 单个文件转换失败不会中断整体流程,通过 try/except 捕获异常并记录到控制台。

4. 批量重命名模板引擎

[ConversionSettings.format_filename](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L37) 实现了基于模板变量的文件名生成,支持以下变量:

变量含义示例
{original}原文件名(不含扩展名)IMG_001
{index}序号1
{index:03d}指定位数的序号(此处为 3 位)001
{prefix}用户自定义前缀旅行
{date}当前日期(YYYYMMDD)20260822

序号宽度通过正则表达式 r'\{index(?::0(\d+)d)?\}' 解析提取,支持 {index}{index:0Nd} 两种形式。

5. 拖放与文件扫描
  • DraggableListWidget 继承自 QListWidget ,重写 dragEnterEventdragMoveEventdropEvent ,接收拖入的文件 URL;

  • 拖入文件夹时,通过 glob.glob(path, recursive=True) 递归扫描其中所有 .heic.heif 文件;

  • 添加文件时通过集合去重,避免重复添加。

6. 文件冲突处理

[handle_existing_file](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L143) 根据用户设置处理同名文件:

  • 启用"覆盖已存在文件":直接覆盖;

  • 未启用:在文件名后追加 _1_2 等序号直至无冲突。


环境要求

  • 操作系统 :Windows 7 及以上(代码中使用 os.startfile ,为 Windows 专有方法)

  • Python :3.8 及以上

  • 依赖库 :

库名用途
PyQt5GUI 框架
Pillow (PIL)图像处理
pillow_heifHEIC/HEIF 格式解码

安装步骤

  1. 安装 Python :从官方地址下载并安装 Python 3.8+,安装时勾选 “Add Python to PATH”。

  2. 打开命令行 ,切换到项目目录:

    cd c:\Users\Administrator\Downloads\data
    
  3. (可选)创建虚拟环境 :

    python -m venv venv
    venv\Scripts\activate
    
  4. 安装依赖 :

    pip install PyQt5 Pillow pillow_heif
    

运行步骤

  1. 确保已完成上述安装步骤。

  2. 在项目目录下执行:

    python heicconvert.py
    
  3. 程序启动后的操作流程:

    • 添加文件 :点击"选择文件"或"选择文件夹"按钮,或直接将 HEIC 文件拖拽到列表区域;

    • (可选)批量重命名 :在"批量重命名"区域选择命名模式、填写前缀、设置起始序号,点击"预览"查看效果;

    • 设置输出 :选择输出目录,调整 JPG 质量,按需勾选"保留元数据"“覆盖已存在文件”“自动创建日期子文件夹”;

    • 开始转换 :点击"开始转换"按钮,在弹出的确认对话框中点击"Yes"开始;

    • 查看结果 :转换完成后可在弹出的对话框中点击"打开文件夹"快速定位输出文件。


注意事项

  1. 操作系统限制 :代码中的 os.startfile() 仅适用于 Windows,在 macOS/Linux 上点击"打开文件夹"会报错,需改用 subprocess.call(['open', path])xdg-open

  2. HEIC 解码依赖 : pillow_heif 依赖底层 libheif 库,若安装失败,可尝试升级 pip 后重新安装,或从 其官方仓库 获取帮助。

  3. 元数据保留 :仅当原图包含 EXIF 数据且勾选"保留元数据"时才会写入;部分 HEIC 文件可能不含 EXIF,此属正常现象。

  4. 质量与体积 :JPG 质量越高,输出文件越大。一般建议 85-95 即可兼顾质量与体积。

  5. 覆盖文件不可恢复 :勾选"覆盖已存在文件"后,同名原 JPG 将被直接覆盖且无法撤销,请谨慎使用。

  6. 子文件夹命名规则 :勾选"自动创建日期子文件夹"后,会在输出目录下创建形如 HEIC转换_YYYYMMDD_HHMMSS 的子文件夹,用于区分不同批次的转换结果。

  7. 转换过程中请勿关闭程序 :转换进行时"开始转换"按钮会变为禁用状态,若强制关闭窗口可能导致部分文件未完成转换。

  8. 去重逻辑 :同一文件不会被重复添加到列表中,但若通过不同路径访问(如软链接)可能被识别为不同文件。


文件夹结构

data/
├── heicconvert.py    # 主程序源代码(包含全部业务逻辑与 GUI 实现)
├── heicconvert.7z    # 源代码压缩包
└── README.md         # 项目说明文档(本文件)
源代码主要模块说明

[heicconvert.py](file:///c:/Users/Administrator/Downloads/data/heicconvert.py) 单文件结构,按职责划分为以下模块:

类名行号区间职责
ConversionSettings[L20-L69](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L20)转换配置数据类,封装输出路径、质量、重命名模式等参数,并提供文件名格式化方法
ImageConverter[L71-L100](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L71)转换控制器,负责创建输出目录、启动工作线程、转发信号
ConversionWorker[L102-L168](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L102)工作线程(QThread),执行实际的图片转换、进度上报、冲突处理
DraggableListWidget[L170-L205](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L170)支持拖放的列表控件
RenamePatternWidget[L207-L338](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L207)重命名模式配置控件,含预览功能
MainWindow[L340-L995](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L340)主窗口,组织所有 UI 元素与业务逻辑
Application[L997-L1027](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L997)自定义 QApplication,设置应用元数据与全局调色板
main()[L1029-L1038](file:///c:/Users/Administrator/Downloads/data/heicconvert.py#L1029)程序入口

源码地址:https://download.csdn.net/download/FL1623863129/90010568

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值