PIL+pyqt 写了一个图片批量无损压缩工具python

前言

学习了一段时间python了…但是一直没有好的系统性的练手项目…
刚好最近想整理电脑里老旧的照片, 图片太多 大概130G 文件…
本人也是比较怀旧的人.图片不想丢弃…磁盘用了有10年了,以防意外…想打包传到云盘备份…但是这个体积太大了.传上去太久.
所以想到了压缩图片
其实网上有很多压缩工具…只是自己根想练手试试…也是系统性的做一个尝试…不然学了python不知道干什么,就知道爬爬爬…
不要界面的话其实 40-50行代码就搞定了…
但是我想写一个成品…可以直接拿出来用的…所以…说干就干…
所以来来回回花费了一周时间又学习了下 Pyqt . 写了一个界面…

开工之前的要求

  1. 需要不修改分辨率
  2. 压缩储存体积
  3. 保留照片拍照信息 exif
  4. 上手就能用

有了要求,那么该怎么做呢…

用什么方式及思路?

  1. 用python中有名的图片处理库 PIL > pip install Pillow 来解决压缩问题.
  2. 或在网上找找用C/C++写的开源库,感觉速度快,效果好
  3. 后来发现自己绕路了,功力尚浅…找了许多大部分是对 PNG图片的处理的…对手机拍照JPG格式基本无效…(坦言,我没找到…有知道的说一声啦 谢谢.)
  4. 其实平时用PIL其实就可以搞定大部分问题…
  5. 本来想用python自带的tinker…感觉写界面太麻烦…所以直接用pyqt 可以方便的画界面.
  6. 所以就直接用 PIL + pyqt 的方式了.

界面展示

在这里插入图片描述
整体压缩率还是挺不错的…而且没有修改分辨率…预览后效果大致相同
在这里插入图片描述
预览页面还需要修改…效果不满意…

需要改进的地方

  1. "设置"和"预览"暂时不能用…预览其实已经写了,但是感觉效果不满意…主要有一些不合理的地方…在查找一下文档看怎么调整…我所想的是 原图在 下面一层,修改后图片在上一层(相当于重叠)…左右拖动上一层图片边框实现调整大小,从而实现对比预览.
  2. PNG格式的 用 PIL 转换 耗时巨大,而且没有效果,甚至是负效果.(如果只是手机拍照基本没有这个问题…因为手机拍照基本是 JPG格式)
  3. 修改分辨率只能批量修改,(看以后需求,可以设置单分辨率)
  4. 最后打包体积巨大…就这些东西打包下来 80+M… (是要研究研究 python打包玄学了)

写的过程中遇到的问题及解决

**问题:**使用 PIL 旋转图片方向的时候 不会修改 exif 信息…导致如果用看图软件的话 ,图片又重新转向了…
**解决:**旋转的图片之后修改exif .PIL没有带这个功能,所以使用piexif 库,之后就解决了.

问题: PNG 图片无法处理
解决: 使用 pngquant 解决的.这个是用C写的,使用命令行模式调用…(如果有其他好方法老哥们分享分享啊)

写最后吧

  1. 其实从无到有满满的成就的…总之不是原来那样的小白了.遇到问题不能自己思考…其实写出来之前遇到了大量的坑…遇到就百度,GitHub找…最后总算明白pyqt的设计思路了.后来写起来才算顺利一点…

  2. 其实你们看的界面图的发,发现我路径里有一个批量命名的…确实 …因为这个图片压缩后有一些图片格式不统一(不同相机/手机拍摄),所以有这个问题…所以顺手写了一个批量处理…实现自动用 exif信息按照统一格式命名…(这个写到最后发现 对平时需要批量命名的也可以.所以又调整了下.基本成型)

  3. 写了这么多也想分享大家使用 压缩包体积确实有点大了…待我调整好了后,需要的朋友我就放到网盘自己去下载吧…

  4. 额!!! 第一篇博客… 压缩包还没上传…传了在修改下载地址哈…

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值