文 | 豌豆花下猫

出处 | 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 tinifyimport os

tinify.key = '此处填入你的key'path = "C:甥敳獲yunpoyuePicturescat" # 图片存放的路径

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

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

题图:pexels,CC0 授权。

批量裁剪或延伸的lisp程序_10 行 Python 代码,批量压缩图片 500 张,简直太强大了...相关推荐

  1. 几行python代码批量对身份证加密

    为保证客户个人关键信息安全,需要对客户四要素:身份证号.手机号.姓名.银行卡等要素进行特定加密,以密文的方式进行业务工作的传输.我们都知道md5.sha256.sm3d等加密方式是无法逆向解密的,是一 ...

  2. 100行python代码做一个程序_100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  3. 10 行 Python 代码,批量压缩图片 500 张,简直太强大了

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

  4. python 复制文件_10 行 Python 代码写 1 个 USB 病毒

    (给Python开发者加星标,提升Python技能) 转自: 知乎-DeepWeaver 昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有wind ...

  5. python 后10个元素_10 行 Python 代码写 1 个 USB 病毒

    来自:知乎,作者:DeepWeaver 链接:https://zhuanlan.zhihu.com/p/35256334 昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的 ...

  6. 截取文件最后10行_10 行 Python 代码自动清理电脑内重复文件,解放双手

    来源 | 早起Python 头图 | 视觉中国 前言 大家好,又到了Python办公自动化系列. 今天分享一个系统层面的自动化案例: 「给定一个文件夹,使用Python检查给定文件夹下有无文件重复,若 ...

  7. python 判断文件夹是否存在 否则创建_10行Python代码自动清理电脑内重复文件,解放双手!...

    大家好,又到了Python办公自动化系列. 今天分享一个系统层面的自动化案例: 「给定一个文件夹,使用Python检查给定文件夹下有无文件重复,若存在重复则删除」 主要涉及的知识点有: os模块综合应 ...

  8. python目标识别_10行Python代码实现目标检测

    要知道图像中的目标是什么? 或者你想数一幅图里有多少个苹果? 在本文中,我将向你展示如何使用Python在不到10行代码中创建自己的目标检测程序. 如果尚未安装python库,你需要安装以下pytho ...

  9. python代码提示太弱了_10行Python代码制作群聊提醒小助手,再也不怕漏掉消息了...

    前言 大家还记得教会父母玩微信是什么时候吗?父母学会后,我们的生活就发生了「质」的变化,父母也许会 吐槽你的微信头像不好,要你换一个头像. 最近 pk哥 又被母后大人吐槽了,原因是亲戚微信群里某个亲戚 ...

  10. python制作课程表提醒_10行Python代码制作群聊提醒小助手,再也不怕漏掉消息了...

    前言 大家还记得教会父母玩微信是什么时候吗?父母学会后,我们的生活就发生了「质」的变化,父母也许会吐槽你的微信头像不好,要你换一个头像. 最近 pk哥 又被母后大人吐槽了,原因是亲戚微信群里某个亲戚生 ...

最新文章

  1. c++文件中引用C代码
  2. 2021网络药理学研究的免费数据库、在线平台与软件工具汇总整理介绍
  3. python中遍历字典判断是否存在_python中如何判断值在不在字典中
  4. html file 隐藏,input type=file /浏览时只显示指定文件类型(html5新特性)
  5. win7下hosts文件位置
  6. Java之Normalizer(归一化)
  7. 十大经典算法总结(JavaScript描述)
  8. python基础之字典、集合
  9. Jmeter---Jmeter安装教程
  10. Nginx证书配置:tomcat证书jks文件转nginx证书.cet和key文件
  11. tipask二次开发总结_测试经验总结(“二次开发”)
  12. 【日记】20220219启动项目蓝屏
  13. 《Mining Quality Phrases from Massive Text Corpora》论文学习笔记
  14. 电磁兼容RS485接口EMC电路设计方案
  15. 数字2019的分解问题
  16. 用js代码判断质数_Js关于质数的判定
  17. MacBook安装JDK(M1芯片版本)
  18. qq空间开场动画代码
  19. 动画(effects)素材dlc导入问题
  20. Ubuntu系统下python opencv视频采集:使用USB端口映射指定要读取的相机设备

热门文章

  1. delphi 连接DBF
  2. Maven生命周期和插件
  3. 编程题目:PAT 1006. 换个格式输出整数 (15)
  4. TextEditor
  5. 边相关扫描线填充算法
  6. 拓端tecdat|R语言样条曲线、分段线性回归模型piecewise regression估计个股beta值分析收益率数据
  7. 拓端tecdat|R语言关联规则模型(Apriori算法)挖掘杂货店的交易数据与交互可视化
  8. detectron2注册数据集
  9. 通过windows远程访问linux桌面的方法(简单)
  10. 【NumPy基础】100道numpy练习——初学与入门篇