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
感谢您的赞赏支持:
Related Issues not found
Please contact @koman to initialize the comment