10 行 Python 代碼,批量壓縮圖片 500 張,簡直太強大了

 

本文原創並首發於公衆號【Python貓】,未經受權,請勿轉載。 原文地址:https://mp.weixin.qq.com/s/5hpFDgjCpfb0O1Jg-ycACwhexo

熟悉 「Python貓」 的讀者應該知道,貓哥我發佈的全部文章都使用了極具特點的配圖——原創文章使用貓圖,轉載文章使用狗圖,極少例外。工具

這幾天,我在用 Github page + hexo 搭建我的網站,爲了延續風格,就想把配圖與文章一塊兒遷移過去。這時候就出現了一個難題:我所用的圖片都是高清大圖,放到網站上就嚴重拖慢了加載速度。所以,須要先把圖片壓縮,再上傳。post

我把需求歸納以下:學習

  • 須要批量壓縮圖片,現有大約 200 張,後會再增
  • 是壓縮,不是切割截取,不改變圖片尺寸
  • 原圖片大部分是 10M - 30M,目標是壓縮成 1M 之內,越小越好

按着這幾條線索,我搜索「批量壓縮圖片」、「圖片壓縮工具「、」批量處理圖片「......優化

一開始的想法是找輕量級的圖片壓縮工具,簡單處理一下就好。然而不知是搜索的姿式不對,仍是篩選過濾信息的姿式不對,結果都差強人氣。網站

查找到的工具備本地與在線兩類,可試驗後都不太理想:有的軟件下載後才發現是付費的,有的在使用時直接致使程序卡死,有的壓縮率不夠須要屢次壓縮,有的要求原始圖片大小不能超過 5 M,有的要求批量處理數量不超過 20 張,有的不支持批量壓縮......羣內小夥伴還幫忙推薦了「PS+批處理」、acdsee、甚至手機應用 snapseed,都不合我意。編碼

花了很多時間後,偶然看到有文章寫用 Python 來壓縮圖片。一文驚醒夢中人,我怎麼沒想到呢?spa

先看看別人是怎麼作的。這篇《如何用Python智能批量壓縮圖片?》(https://zhuanlan.zhihu.com/p/32246003)文章中介紹了使用 PIL 庫的 Image 模塊來壓縮圖片的方法,主要經過調節圖片長寬數值的方式。翻譯

PIL 是個強大的圖片處理庫,但只支持 Python 2,並且早已中止更新。有開發者在它基礎上改良並維護了 Pillow,支持 Python 3。以前有所耳聞,沒用過。因而貓哥查了幾篇教程和文檔。讀後發現它壓縮圖片的方法主要是等比例縮放、裁剪以及改變格式等,並不是我所要的。code

還看到一篇《如何在無損的狀況下讓圖片變的更小》(http://www.javashuo.com/article/p-yctpjtvu-ht.html)文章,它介紹了 Yelp(美國最大點評網站)的三種優化圖片的策略:Pillow、動態調優、更換編碼器。有些方法很高大上,應該是業界先進經驗了,但它但願保證圖片無損,全部方法加起來纔可使圖片大小平均減小 30%,所以並不知足個人要求。另外它引伸介紹了幾種方法,但是須要花費時間去研究,我也放棄了。

最後,終於找到了一種很是便捷,又十分知足的方案,下面開始進入正題了。(不要嫌我囉嗦,探索的過程也頗有趣)(噓,其實是由於下面要介紹的方法太簡單,才區區幾行代碼,我實在忍不住強行加戲......)

----------------當心翼翼的分割線---------------

Tinypng 網站提供在線圖片壓縮服務,是全部圖片壓縮工具中最好用的之一,但它有所限制:批量最多處理 20 張,且每張大小不容許超過 5 M。

這個網站很是良心,開放了免費的 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 還提供圖片裁剪、加水印、保存壓縮圖片至雲服務商(亞馬遜雲、谷歌雲)等功能,很是強大。除了壓縮過程有點慢,其它無可挑剔。

通過一番探索與比較,我肯定這是目前的最優方案,因此強烈分享給你們。

公衆號【Python貓】, 本號連載優質的系列文章,有喵星哲學貓系列、Python進階系列、好書推薦系列、技術寫做、優質英文推薦與翻譯等等,歡迎關注哦。後臺回覆「愛學習」,免費得到一份學習大禮包。

相關文章
相關標籤/搜索