熱線電話:13121318867

登錄
首頁精彩閱讀什么!竟然有人把圖片從 1M 優化到 1024kb(CDA內容分享)
什么!竟然有人把圖片從 1M 優化到 1024kb(CDA內容分享)
2022-01-12
收藏

作者:豆豆

來源:Python 技術

前兩天刷知乎熱搜看到一篇帖子,某省會城市健康碼連續兩次崩潰,相關公司在之前的報道中還聲稱:用兩天兩夜,將 1M 圖片優化到 100kb。

什么!竟然有人把圖片從 1M 優化到 1024kb

報道中提到:“為了確保系統運行更高效,他們將一張圖片從 1MB 壓縮到 500 KB,再從 500KB 優化到 100kb?!?/span>

同時還聲稱,這樣的工作看似簡單,卻蘊含著高技術含量,工程師連續兩天兩夜守在電腦前,終于攻下難關。

關于健康碼崩潰的事網上眾說紛紜,但消息肯定真有假,就坐等官方發布最終消息就好了。不信謠不傳謠。

今天咱們就單純來討論下圖像壓縮這件事。

關于圖像壓縮,工作中肯定是少不了的,尤其是涉及到圖片傳輸和存儲的時候,比如微信、微博、知乎等都需要考慮如此大批量的圖片如何存儲的問題。

都知道,咱 Python 是有很多圖像庫的,那想搞一下圖像壓縮還不是手到擒來,

PIL

PIL 是 Python Image Library 的簡稱,其功能非常強大,短短三行代碼即可實現圖像的壓縮。

咱們先來看下原圖。

什么!竟然有人把圖片從 1M 優化到 1024kb
from PIL import Image

im = Image.open("girl.jpg")
im.save("girl-out2.jpg", quality=10) # quality 是壓縮比率 

來看下壓縮之后的。

什么!竟然有人把圖片從 1M 優化到 1024kb

從以上壓縮結果來看,quality 設置為 10 時從 2.5MB 壓縮到了 400KB,整體效果還是不錯的。但整體來看圖片是有一定的失真的,尤其是突然將圖片放大之后,失真更明顯,不信你看。

什么!竟然有人把圖片從 1M 優化到 1024kb

經過多次實驗,發現將 quality 設置為 20 效果最佳。此時圖像最終大小壓縮到了 500KB,而且圖片也不會失真。

事實上,PIL 提供了很多方法對圖片進行縮放,下面咱們再試試另外一種辦法。

from PIL import Image

im = Image.open("girl.jpg")
w, h = im.size
im.thumbnail((w // 2, h // 2)) im.save("girl-out.jpg")
什么!竟然有人把圖片從 1M 優化到 1024kb

在上面的代碼中,我們先獲得了圖片的原始尺寸,然后直接將圖片縮放至原來的百分之五十。最終圖片大小為 343KB,而且圖片看起來也不會失真。

由此可見,thumbnail() 的效果要比設定 quality 的效果要好一些。

當然,PIL 還提供了 resize() 函數來對圖片進行縮放,小伙伴們可以自行嘗試下哦。

OpenCV

OpenCV 也是一個比較好用的操作圖像的庫,四行代碼實現圖片縮放。

import cv2 as cv

img = cv.imread("girl.jpg")
resize_img = cv.resize(img, (0, 0), fx=0.25, fy=0.25, interpolation=cv.INTER_NEAREST)
cv.imwrite('girl-out3.jpg', resize_img)
什么!竟然有人把圖片從 1M 優化到 1024kb

在以上的代碼中,我們先將原始圖片讀入進來,之后縮放至原圖的四分之一。從結果來看,效果還算可以。大小合適,圖像沒有明顯的失真。

總結

今天給大家介紹了兩款高質量圖像處理庫,從結果來看,二者的壓縮效果是差不多的。事實上,這兩個庫不僅適用于圖像壓縮,還有很多高級玩法,這個就要靠小伙伴們自行解鎖了。

除了本文所說的兩個圖像操作庫,你還知道哪些方便好用的圖像庫么,可以在評論區和大家分享一下呀~

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢