现在网络上很多站点上使用的图片都换成了webp格式。webp格式文档的优点是:文件小,非常小。缺点也很明显,不太方便直接使用。需要使用比较专业的编辑工具。
使用python的Pillow库,可以将webp格式文件转换为png或jpg格式。
网上随意找了一张webp图片,图片地址,大小为44.9K。使用Pillow库转换为png为496K。
因为图片太大,使用了两种PNG压缩方式进行对比。
1 使用Pillow库对图片进行压缩,从44.9K压缩到496K。基本上没什么变化。
2 使用Tinity库进行图片压缩,需要使用api_key,点击(官方地址)获取api_key。非常出名的压缩工具。从624K压缩到289K。效果非常明显,图片质量损失很小。缺点是,速度慢。
3 使用Google提供的库,可惜不能翻墙,无法对比。
代码如下:
# 导入PNG压缩库
from PILimport Image
import tinify
import subprocess
# 使用webpa转换为PNG
def convert_webp_to_png(webp_file_path, output_png_file_path):
# 打开WebP格式的图片
with Image.open(webp_file_path)as img:
width, height = img.size
# 转换为PNG格式
png_img = img.save(output_png_file_path, 'PNG')
# 使用Pillow库对图片进行压缩
# 压缩质量很差,不推荐使用
def pillow_compress_image(pillow_input_image_path, pillow_output_image_path):
with Image.open(pillow_input_image_path)as image:
image.save(pillow_output_image_path, "PNG", optimize=True, quality=60)
# 使用Tinity库进行图片压缩
def tinity_compress_image(tinity_input_image_path, tinity_output_image_path):
tinify.key ="***" #这里需要填写您在官方申请的api_key
with open(webp2png, 'rb')as source:
source_data = source.read()
result_data = tinify.from_buffer(source_data).to_buffer()
with open(tinity_output_image_path, 'wb')as output:
output.write(result_data)
# 使用tinify库对图片进行压缩
webp_file ='./output/Webp2jpg_png/example.webp'
webp2png ='./output/Webp2jpg_png/webp2png.png'
webp2png_Pillow ='./output/Webp2jpg_png/webp2png_Pillow.png'
webp2png_Tinity ='./output/Webp2jpg_png/webp2png_Tinity.png'
# 把webp转换为png
convert_webp_to_png(webp_file, webp2png)
# 使用pillow库压缩图片
pillow_compress_image(webp2png, webp2png_Pillow)
# 使用Tinity库压缩图片
tinity_compress_image(webp2png, webp2png_Tinity)