不管是 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