使用 python 壓縮 png 圖片,高達 80% 壓縮率,肉眼無差異(一):為什么不用 pillow庫.md


在網上有很多使用 python 的 pillow 庫進行圖片壓縮的教程,使用簡單,但是壓縮效果存在明顯的色彩不自然,這是因為 pillow 庫采取的壓縮算法沒有優化的問題。

這個系列實現一款簡單的壓縮工具,使用 pngquant 有損壓縮,壓縮率高達 80%, 而且壓縮后的圖片沒有明顯差異。

系列文章:

1,使用 python 壓縮 png 圖片,高達 80% 壓縮率,肉眼無差異(一):為什么不用 pillow庫.md

2,使用 python 壓縮 png 圖片,高達 80% 壓縮率,肉眼無差異(二):使用 pngquant 實現圖片壓縮

3,使用 python 壓縮 png 圖片,高達 80% 壓縮率,肉眼無差異(三):使用 click 庫實現命令行

4,使用 python 壓縮 png 圖片,高達 80% 壓縮率,肉眼無差異(四):使用 requests 庫上傳

開發目的

我經常使用圖片。公眾號文章發文也好,還是生活中要使用素材。圖片是一種比文字更加直觀的載體。

但是圖片更加占用帶寬,很多軟件都對圖片有大小限制。圖片太大也會影響加載速度。

我試過幾款圖片壓縮工具,比如 tinypng 和 tinyjpg 非常好用,體驗也非常棒。 但是它存在幾個局限的地方:

  • 1, 每次不能超過 20 張圖片,因為 tinypng 是一個 web 網站,一次上傳太多勢必影響 速度和服務器壓力;
  • 2,不能控制壓縮比例,這一點 compressjpeg.com 做的很好,可以對每一張圖片進行控制
  • 3,寫文章的時候我 markdown 用得非常多,所以我希望在壓縮的時候順便上傳到圖床。

所以希望自己能做一款簡單好用的圖片工具,順便定制一些自己常用的功能。

初步設想

我的初步設想是這樣的:

1, 先通過命令行的形式來使用,非常方便,后面如果有需求再寫界面。

picom 圖片名稱.jpg

這條命令可以對圖片進行智能壓縮。格式為原來的格式,生成的新圖片名字為 圖片名稱_picom.jpg

2,指定新文件名

picom name.jpg -o new_name.png 

圖片的格式也將根據新的文件名稱跟着變化

3,只指定格式

picom name.jpg --format png

圖片指定為新的格式,但是文件名還是默認的。

4,裁剪大小

picom name.jpg --size normal

圖片將被裁剪成正常大小,可以設置幾檔常用的

5,裁剪指定具體大小

picom name.jpg --size 920*520

6, 上傳到圖床

picom name.jpg --upload

上傳到圖床以后,返回圖床地址。圖床的地址用什么形式保存還在思考。

可能涉及的知識和庫

  • click 命令行工具
  • subprocess 子進程管理工具
  • pillow 庫使用
  • pngquant (一個png圖片有損壓縮)
  • mozjpeg
  • optipng (png 無損壓縮)
  • python 如何調用 c 代碼
  • requests 庫和 aiohttp / aiofile 庫的使用

嘗試使用 pillow 庫進行圖片壓縮

pillow 是 python 處理圖片的一個非常厲害的庫 , 帶有圖片壓縮的功能。

我先后嘗試使用 pillow 的以下 API 對圖片進行壓縮,得到的結果不是很好。

  • save(quality=50)
  • save(optimize=True)
  • quantize()
  • convert("RGB")

1,quality 參數

save 方法當中的 quality 參數只適合用在 jpg 格式上,通常 80 左右的質量不會有明顯的感覺。 用在 png 格式上無效,但是也不報錯。 image.png

2,optimize 參數

optimize 參數直接壓縮沒有明顯效果。 image.png

3,quantize 方法

quantize 是主要用到的壓縮優化函數,在 png 格式壓縮上,能減少 70% 左右的空間,但是顏色差異明顯。

image.pngimage.png

這是壓縮后效果對比: quantize effect.jpg

4, convert 方法 通過把 png的RGBA 格式轉化成 RGB 格式,可以減少大約 20% 的大小

5,PNG 以 jpg 格式保存

先通過 convert 方法轉成 RGB 格式,然后另存為 jpg 格式,圖片效果沒有明顯減弱,但是大小迅速減少。 image.png

結論

pillow 目前不太適合做 PNG 圖片壓縮處理,jpg 可以作為備選。 pillow 的主要應用場景可以用在灰度轉化,尺寸控制方面,這些功能等把核心的壓縮問題解決以后再加。

參考資料

請使用手機"掃一掃"x


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM