博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10 行 Python 代码,批量压缩图片 500 张,简直太强大了
阅读量:2072 次
发布时间:2019-04-29

本文共 2075 字,大约阅读时间需要 6 分钟。

文 | 豌豆花下猫

出处 | Python 猫公众号

这几天,我在用 Github page + hexo  搭建个人网站,为了延续风格,就想把配图与文章一起迁移过去。这时候就出现了一个难题:我所用的图片都是高清大图,放到网站上会严重拖慢加载速度。因此,需要先把图片压缩,再上传。

我把需求概括如下:

  • 批量压缩图片,现有约 200 张,后会再增

  • 是压缩,不是切割截取,不改变图片尺寸

  • 原图片大部分是 10M - 30M,目标是压缩成 1M 以内,越小越好

按着这几条线索,我搜索“批量压缩图片”、“图片压缩工具“、”批量处理图片“……

开始的想法是找轻量级的图片压缩工具,简单处理一下就好。然而不知是搜索的姿势不对,还是筛选过滤信息的姿势不对,结果都差强人意。

查找到的工具有本地与在线两类,可试验后都不太理想:有的软件下载后才发现是付费的,有的在使用时直接导致程序卡死,有的压缩率不够需要多次压缩,有的要求原始图片大小不能超过 5 M,有的要求批量处理数量不超过 20 张,有的不支持批量压缩……群内小伙伴还帮忙推荐了“PS+批处理”、acdsee、甚至手机应用 snapseed,都不合我意。

花了不少时间后,偶然看到有文章写用 Python 来压缩图片。一文惊醒梦中人,我怎么没想到呢?

先看看别人是怎么做的。这篇《如何用Python智能批量压缩图片?》(https://zhuanlan.zhihu.com/p/32246003)文章中介绍了使用 PIL 库的 Image 模块来压缩图片的方法,主要通过调节图片长宽数值的方式。

PIL 是个强大的图片处理库,但只支持 Python 2,而且早已停止更新。有开发者在它基础上改良并维护了 Pillow,支持 Python 3。之前有所耳闻,没用过。于是猫哥查了几篇教程和文档。读后发现它压缩图片的方法主要是等比例缩放、裁剪以及改变格式等,并非我所要的。

还看到一篇《如何在无损的情况下让图片变的更小》(https://juejin.im/post/5959fbe0f265da6c2518d740)文章,它介绍了 Yelp(美国最大点评网站)的三种优化图片的策略:Pillow、动态调优、更换编码器。有些方法很高大上,应该是业界先进经验了,但它希望保证图片无损,所有方法加起来才可以使图片大小平均减少 30%,因此并不满足我的要求。另外它引申介绍了几种方法,可是需要花费时间去研究,我也放弃了。

最后,终于找到了一种非常便捷,又十分满足的方案,下面开始进入正题了。(不要嫌我啰嗦,探索的过程也很有趣)(嘘,实际上是因为下面要介绍的方法太简单,才区区几行代码,我实在忍不住强行加戏……)

----------------小心翼翼的分割线---------------

Tinypng 网站提供在线图片压缩服务,是所有图片压缩工具中最好用的之一,但有限制:批量最多处理 20 张,且每张大小不允许超过 5M。

这个网站非常良心,开放了免费的 API ,API 取消了每张大小的限制,只限定每个月处理 500 张图片。这对我来说,已经足足有余了。

下面介绍怎么使用它。第一步是在它网站上注册,获得专属的 API_KEY。使用的是邮箱注册,很简单。

然后是安装 package:

pip install --upgrade tinify

接着是处理图片:

import tinify import os tinify.key = '此处填入你的key' path = "C:\\Users\\yunpoyue\\Pictures\\cat" # 图片存放的路径 for dirpath, dirs, files in os.walk(path):     for file in files:         imgpath = os.path.join(dirpath, file)         print("compressing ..."+ imgpath)         tinify.from_file(imgpath).to_file(imgpath)

不到 10 行代码,轻轻松松就批量压缩图片,简直不要太爽!20 M 的图片能压缩到 2 M,压缩率达到惊人的 90%,成绩喜人。

它的API还提供图片裁剪、加水印、保存压缩图片至云服务商(亚马逊云、谷歌云)等功能,非常强大。除压缩过程有点慢,其它无可挑剔。

经过一番探索与比较,我确定这是目前的最优方案,所以强烈分享给大家。

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,立即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~

推荐阅读

题图:pexels,CC0 授权。

转载地址:http://alpmf.baihongyu.com/

你可能感兴趣的文章
【NLP学习笔记】(二)gensim使用之Topics and Transformations
查看>>
【深度学习】LSTM的架构及公式
查看>>
【python】re模块常用方法
查看>>
剑指offer 19.二叉树的镜像
查看>>
剑指offer 20.顺时针打印矩阵
查看>>
剑指offer 21.包含min函数的栈
查看>>
剑指offer 23.从上往下打印二叉树
查看>>
Leetcode C++《热题 Hot 100-18》538.把二叉搜索树转换为累加树
查看>>
Leetcode C++《热题 Hot 100-21》581.最短无序连续子数组
查看>>
Leetcode C++《热题 Hot 100-22》2.两数相加
查看>>
Leetcode C++《热题 Hot 100-23》3.无重复字符的最长子串
查看>>
Leetcode C++《热题 Hot 100-24》5.最长回文子串
查看>>
Leetcode C++《热题 Hot 100-28》19.删除链表的倒数第N个节点
查看>>
Leetcode C++《热题 Hot 100-29》22.括号生成
查看>>
阿里云《云原生》公开课笔记 第二章 容器基本概念
查看>>
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>