本文一步步为你介绍,如何用Python自动判断多张图片中哪些超出阈值需要压缩,且保持宽高比。如果你想了解Python图像处理的基础知识,欢迎动手来尝试。

痛点
我喜欢用Markdown写文稿,然后发布到不同写作平台。我的好友数字游民Jarod称其为“矩阵式发布”。能这样做的前提,是Markdown为我们带来了极低的边际发布成本。试想如果每个写作平台,都需要我手动插下20-30张图片,想想都眼晕,我估计立刻会打消发布念头。
我使用七牛作为图床。图片链接成功转换后,选择一款渲染工具,预览文稿格式,看图片、表格、标题等特殊样式是否显示正确。
我曾经用过多种渲染工具。最近我一直在用Md2All。
这款工具最大的特点,是能保证粘贴到各个写作平台时,代码不会乱掉。

点击右上方的“复制”按钮,你就可以在任何一个写作平台上,开启富文本编辑器,然后粘贴进去。
工作进行到这一步,已近大功告成。这时,如果你遇到“图片上传失败”的报错,想必会很影响心情。
图片上传失败,原因可能有很多。
许多情况下,只是单纯因为网络拥塞。只要你本着愚公移山的精神,往复重新粘贴,总会好的。
但是微信公众平台是个例外。
你时常会遇到这种情况——就是那两张图片,死活也无法正常传上去。
踩坑多次,不得不手动上传图片后。我终于发现了问题所在——微信公众平台对图片大小有限制。
一旦你要上传的图片超过2M,就无法正常粘贴上传了。
莫非我写作文章时,还要一一检验每张插图的大小?超过阈值的图片压缩,然后再上传?
对我这种插图爱好者来说,这个工作太过琐碎和枯燥了。
你可能会问,不是有许多工具可以批量修改图片大小吗?例如JPEGmini和TinyPNG之类的?
确实有,但是它们不完全符合我的需求。
首先,我并不需要压缩全部图像。压缩后的图片,确实在手机上看起来跟原图毫无区别。但我用的图片,很多是教程里的示例。学生可能需要放大到一定程度,甚至要在大屏幕上打开,来查看代码或者运行结果的细节。只要原图没超过2M,还是保持原貌比较稳妥。
其次,我懒。每次写完文章,还得手动运行一个应用,找出这篇文章对应的图片,拖动进去……不好意思,这活儿我懒得干。
幸好,凡是简单重复的枯燥活儿,都是电脑的拿手好戏。否则我们学编程干什么?
我用Python做个程序,替我找出全部大于2M的图片,进行压缩。压缩的时候,须要保持图片的宽高比例。
如果你对Python图像预处理功能比较感兴趣,不妨跟着我的介绍,一起试试看。
数据
我已经为你准备好了样例图片和执行代码,并且存储在了一个Github项目中。请访问这个链接,下载压缩包后,解压查看。

可以看到,在image目录下,有2个png格式的图像文件。
我们打开来看看,一张cat.png是可爱的猫咪。

另一张,是小松鼠。