不管是 PC 還是移動端,圖片一直是流量大頭,如何保證在圖片的精細度不降低的前提下縮小圖片體積,成爲了一個有價值且值得探索的事情。但如今對於 JPEG、PNG 和 GIF 這些圖片格式的優化幾乎已經達到了極致,爲了進一步有效的壓縮圖片, Google 給了我們一個新選擇:WebP。
WebP(發音:weppy)是一種同時提供了有損壓縮與無損壓縮(可逆壓縮)的圖片文件格式,是由Google在購買On2 Technologies後發展出來,以BSD授權條款發佈,可以免費使用。根據Google較早的測試,WebP的無損壓縮比網絡上找到的PNG檔少了45%的文件大小,即使這些PNG檔在使用pngcrush和PNGOUT處理過,WebP還是可以減少28%的文件大小。因此,如果服務器需要存儲大量的圖片,那麼使用WebP格式可以大幅減少存儲開銷,同時也可以降低網絡傳輸流量。
目前,主流的瀏覽器如360瀏覽器、搜狗瀏覽器、火狐瀏覽器、谷歌瀏覽器都支持WebP格式。同時,谷歌也提供了安卓和iOS的WebP格式demo。因此,爲了有效降低存儲開銷,使用WebP是一個較爲穩妥成熟的方案。
下面給出Python版本的WebP圖像編碼和解碼代碼。
首先安裝Pillow庫:
pip install pillow
然後編碼代碼如下(實現jpg圖片到WebP格式圖片的轉換):
from PIL import Image
imagePath = "1.jpg" #讀入文件名稱
outputPath = "1.webp" #輸出文件名稱
im = Image.open(imagePath) #讀入文件
im.save(outputPath) #編碼保存
編碼完成後可以直接用360瀏覽器打開1.webp文件,查看是否正常。
解碼代碼如下:
from PIL import Image
imagePath = "1.webp" #讀入文件名稱
outputPath = "1_new.jpg" #輸出文件名稱
im = Image.open(imagePath) #讀入文件
im.save(outputPath) #解碼保存
採用上述方式只需要安裝較常用的pillow庫即可,但是無法有效的對圖像編碼質量進行設置,比如壓縮因子等。下面介紹另一種更有效的方法:使用webp庫。
webp在windows下面的安裝比較麻煩,需要依賴C++環境進行編譯。由於我電腦以前提前裝好了VS2015,因此下面就比較簡單了:
pip install webp
安裝時可能會出現下面的錯誤:
LINK : fatal error LNK1158: 無法運行“rc.exe”
error: command 'E:\\toolplace\\VS2015\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1158
爲了解決上述問題,只需要將C盤中C:\Program Files (x86)\Windows Kits\8.1\bin\x64 中的rc.exe和rcdll.dll文件複製到VS2015安裝目錄下,具體複製路徑爲:E:\toolplace\VS2015\VC\bin\x86_amd64
安裝完成後就可以直接使用了。代碼如下:
# 編碼
import webp
from PIL import Image
imagePath = "1.jpg" #讀入文件名稱
im = Image.open(imagePath) #讀入文件
webp.save_image(im, '1.webp', quality=80) #壓縮編碼 設置壓縮因子爲80
具體的webp使用請參考官方網址:https://github.com/anibali/pywebp