前言

学习了一段时间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. 额!!! 第一篇博客… 压缩包还没上传…传了在修改下载地址哈…

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

  1. 【办公软件有哪几种】万彩办公大师教程丨图片批量无损压缩工具

    图片大小压缩工具, 导入图片(目前支持bmp/gif/png/jpg),一键批量压缩图片大小. 使用智能压缩算法, 在保证图片品质的情况下压缩图片. 支持自定义压缩比率, 压缩比率可高达95%. 一. ...

  2. python PIL 将带透明底png图片批量转化为jpg格式

    需求: 将带透明底png图片批量转化为jpg格式 遇到的问题: 好多帖子的方法虽然可以将png图片转化为jpg图片,但是转化后的jpg图片有问题,转化后的图片和原图差距太大 解决办法: 直接将png图 ...

  3. 写了一个图片横向滚动且首尾相接的JS组件

    当年我也是从网上down组件直接拿来用的小白. 记得三年前去XM面试的时候,明哥问我: "如果你需要一个页面特效,你怎么做?" 我呆萌的回答说:"网上down一个哦!&q ...

  4. JavaScript写的一个图片的抽奖功能的案例

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  5. 网页图片批量获取(Python教程)

    推荐自己的专栏:玩一玩爬虫咯 文章中的许多代码都有对于路径的操作,代码中所给路径仅作参考,请根据自身情况进行适配 本文仅作敲砖引玉之用,所讲解知识点有限,只讲解了文本代码中用到的知识点 文章目录 图片 ...

  6. pythonjava app切出后无网络连接_写了一个java的Server 用python的client访问却访问不通问题。...

    首先给出这个java的Server代码 try{//1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 ServerSocket serverSocket=ne ...

  7. python批量裁剪图片_用Python写了一个图片格式批量处理工具

    来源:blog.csdn.net/kimol_justdo 前言 就在昨天,正当我在刺激战场厮杀时,"叮叮叮",微信来消息了.我心想:"这是肾马情况?" 我打开 ...

  8. Python3,为了给女神暗送秋波,我默默的写了一个图片字符画生成器,真香。

    图片字符画制作 1.引言 2.代码实战 2.1 原理 2.2 实例 3.总结 1.引言 小屌丝:鱼哥,给你看个照片. 小鱼:什么-照片-首先声明,我可是正经人. 小屌丝:你先看看. 小鱼:就这,有啥好 ...

  9. 自己写的一个抢票加速的Python小程序源码分享-----纯属娱乐

    最近这段时间频频看到微信群里发什么 抢票加速,智行.携程.飞猪.美团,对于我这能坐客车就不坐火车的人来说,无所谓靠谱不靠谱 突发奇想的整理了下整个抢票加速的逻辑,写了这个小程序,代码很low,拒绝批评 ...

最新文章

  1. kdj指标主要看哪个值_什么是KDJ?KDJ指标如何使用
  2. Qt中为工程添加资源文件、给按钮添加图片
  3. Linux 下第一个shell脚本
  4. vs 移除项目代码管理
  5. JavaScript Break 和 Continue 语句
  6. LeetCode:每日一题——数位成本和为目标值的最大数字
  7. VB编程:GetSetting控制软件试用期-56
  8. Xposed入门篇之安装xposed框架
  9. 利用接口实现动态加载类以及 Activator.CreateInstance用法示例
  10. 鸿蒙818与A73,荣耀智慧屏正式发布:鸿鹄818智慧芯片+鸿蒙OS,开启未来新视觉
  11. 论文阅读: Inertia Tensor Properties in Robot Dynamics Identification: A Linear Matrix Inequality Approac
  12. B05 - 008、什么是大数据
  13. 【JavaEE】简单了解操作系统、进程内存管理
  14. Error Some file crunching failed, see logs for details 解决方案
  15. java实现附件预览(openoffice+swftools+flexpaper)
  16. 大数据技术Flink详解
  17. 曼尼托巴大学计算机科学硕士,加拿大曼尼托巴大学优势专业有哪些
  18. UI自动化测试(一)
  19. html、css、js(javaWEB开发)
  20. 实验十 基于Simulink的爬山法MPPT技术仿真

热门文章

  1. 安装Vue-cli并且创建项目
  2. 50道MySQL面试题,掌握之后你将获得无上法力,一发不可收拾!
  3. 为什么我的cairo画出的直线不同角度宽度不同???
  4. 优麒麟这款工具,助你提高60%的工作效率
  5. 浩鲸科技是外包公司吗_软件外包公司开发软件可靠吗
  6. 编程的宗派(OOP与FP孰优孰劣)--王垠
  7. 山东移动服务器密码修改,移动服务器山东 dns地址
  8. FPGA:逻辑函数的卡诺图化简法
  9. Docker入门之HelloWorld(一)
  10. OpenCV - imwrite保存透明PNG