WebP是Google推出的一种新式图片格式,为Web上的图像提供出色的无损和有损压缩。相比于常用的jpg、png和gif格式,最大的优势就是同等质量下压缩率更高、图片文件更小、利于节约存储空间和网络带宽。
根据Google的测试,无损压缩后的WebP比PNG文件少了45%的文件大小,即使这些PNG文件经过其他压缩工具压缩之后,WebP还是可以减少28%的文件大小。
WebP官网(需要科学上网):https://developers.google.com/speed/webp/。
Google提供了一组工具集合,叫libwebp,其中包括各种webp相关转换的命令:
img2webp
输入一系列静态图像(PNG、JPEG、TIFF、WebP),创建一个动态WebP文件。
# 语法
img2webp [file-level options] [image files...] [per-frame options...]
# 示例
img2webp -loop 0 -d 2000 01.png 02.png 03.png -o out.webp
cwebp
将JPEG、PNG或TIFF编码成WebP。
# 语法
cwebp [options] in_file [-o out_file]
# 示例
cwebp -s 600 300 -q 80 input.png -o output.webp
-s <int> <int>
:输入大小(宽度x高度)-q <int>
:压缩率[0,100]dwebp
将WebP解码成PNG。
vwebp
webp图片浏览器。命令行输入命令,在桌面上弹出一个GUI窗口显示图片:
vwebp output.webp
webpmux
WebP muxing tool。
gif2webp
将GIF转换为webp图片。
下载WebP Converter,根据对应系统平台选择版本,解压安装
配置环境变量
计算机 — 右键 — 系统属性 — 环境变量 — 系统变量 — Path,将下载的webp工具解压后的bin目录加入Path环境变量。
png序列帧转换webp动画:
使用WebP Converter提供的img2webp工具
要求图片分辨率一致。
cwebp + webpmux
先将png文件通过cwebp工具分别进行转换为webp静态序列,质量压缩等自己可以根据需求转换,然后在用webpmux 工具,将所有的webp静态序列打包成webp动态动画。
命令行操作:
打开命令行工具(例如cmd、Git Bash等),cd切换到图片所在目录
输入命令,转换图片格式
根目录的Readme.txt是命令的帮助文档
$ img2webp -loop 0 -d 2000 01.png 02.png 03.png -o out.webp
output file: out.webp [3 frames, 17560 bytes].
-loop <int>
:循环计数(默认值:0,=无限循环)-d 2000
:图片持续停留时间(毫秒)-o out_file
:指定输出WebP文件的名称脚本(shell)文件(假设保存为img2webp.sh):
read -p "请输入图片路径(默认:g:/下载): " var
path=${var:-"g:/下载"} # 设置默认路径,若变量var为null或为空字符串时,则path="g:/下载"
read -p "请输入图片关键字(默认后缀为PNG或JPG): " keyword
filelist=`ls $path/*$keyword*.{png,jpg}` # 筛选图片(指定路径、关键字、后缀默认为PNG或JPG)
echo "目标图片:" $filelist
imgs=''
for file in $filelist
do
imgs=$imgs$file" "
done
img2webp -loop 0 -mixed -d 2000 $imgs -o $path"/"out.webp # 执行转换命令
使用谷歌webp压缩图片,在JPEG和PNG上的转化效果非常优秀、稳定和统一。
核心压缩命令简写如下:
cwebp input.png -q 80 -o output.webp
使用Python编写的批处理脚本:
# -*- coding: utf-8 -*-
from glob import glob
import os
from threading import Thread
import logging
from PIL import Image
def convert_img_type(infile, index):
encoder_path = "C:/Users/ruonan/libwebp-1.0.0-windows-x64/bin/cwebp.exe"
output_path = "C:/Test01/20150806205033/webp/"
if not os.path.exists(output_path):
os.mkdir(output_path)
new_size = get_new_size(infile)
commond = encoder_path + " -q 80 -resize " + str(new_size[0]) + " " + str(new_size[1]) + " " +infile + " -o "+output_path + str(index) + ".webp"
os.system(commond)
def get_new_size(infile):
img = Image.open(infile)
width = img.size[0]
height = img.size[1]
phone_px = 500
scale = float(phone_px) / width
if width <= phone_px:
return width,height
else:
height = int(height * scale)
return phone_px, height
def start():
index = 1
input_path = "C:/Test01/20150806205033/*.jpg"
for infile in glob(input_path):
print infile
t = Thread(target=convert_img_type, args=(infile, index,))
t.start()
t.join()
index += 1
if __name__ == "__main__":
start()
- []()
- []()
- []()
- 操作系统:Win 10
感谢您的赞赏支持: