WebP 介绍
WebP 是由 Google 推出的一种全新图片文件格式,也是 Telegram Stickers 主力使用的文件格式,可为Web 上的图像提供卓越的无损和有损压缩, 它是在保证原有的图像质量前提下尽可能减少图形体积的一种格式, 使用 WebP 网站管理员和 Web 开发人员可以创建更小、更丰富的图像,从而使 Web 加载性能的提升更快。
设置工作目录在 /home/compose
mkdir -p /home/compose/webp-server
新建文件
nano /home/compose/webp-server/docker-compose.yml
编写 docker-compose.yml
#version: '3'
services:
webp:
image: webpsh/webp-server-go
# image: ghcr.io/webp-sh/webp_server_go
container_name: webp-server
restart: always
ports:
- 3333:3333
volumes:
##- ./config.json:/etc/config.json #Custom config 自定义配置
#- ./pics:/opt/pics # 原图目录
#- ./exhaust:/opt/exhaust # 转换缓存
#- ./metadata:/opt/metadata # 元数据
- /mnt/10t/file/webdav/images/pics:/opt/pics # 原图目录
- /mnt/10t/file/webdav/images/exhaust:/opt/exhaust # 转换缓存
- /mnt/10t/file/webdav/images/metadata:/opt/metadata # 元数据
- ./config.json:/etc/config.json
environment:
#更多参数请查阅:https://docs.webp.sh/usage/configuration/
- MALLOC_ARENA_MAX=1 # 内存优化参数
#- ENABLE_EXTRA_PARAMS=true # 开启高级参数
#实战效果展示
#访问http://IP:3333/产品图.jpg,肉眼可见的变化
#支持?width=800&height=600参数智能缩放(图2)
- WEBP_ENABLE_EXTRA_PARAMS=true #表示是否启用额外参数,基本上它允许你对图像进行一些变换,如 https://img.webp.sh/path/tsuki.jpg?width=20 ,你可以在额外参数页面找到更多信息。
#- WEBP_MAX_CACHE_SIZE=0
#以 MiB 为单位,默认值为 0,这意味着不会清理本地缓存文件。如果设置此值为 50,例如,那么 WebP Server Go 将每分钟运行一个后台任务,以确保本地缓存目录( ./metadata 、 ./exhaust 和 ./remote-raw (如果使用远程后端))分别保持在 50MiB 以下。
#- WEBP_CACHE_TTL=0
#远程后端(代理模式)的缓存 TTL(分钟)我们使用 HEAD 请求获取远程图片信息,因此您的后端需要支持 HEAD 请求,在第一次成功 HEAD 请求后,它将被缓存 CACHE_TTL 分钟,在此期间,我们将不再发送 HEAD 请求,而是使用本地缓存进行渲染。Setting this value to 0 means cache forever.将此值设置为 0 表示永久缓存。
#- WEBP_DISABLE_KEEPALIVE="" #字符串 禁用长连接,服务器在向客户端发送第一个响应后关闭传入的连接
- WEBP_CONCURRENCY=4 #最大并发连接数
#- WEBP_READ_BUFFER_SIZE=0 #连接请求的读取缓冲区大小。这也限制了最大头部长度。如果您的客户端发送多 KB 的 RequestURIs 和/或多 KB 的头信息(例如,大的 cookies),请增加此缓冲区。
#- WEBP_EXTRA_PARAMS_CROP_INTERESTING="InterestingAttention" #定义当 ENABLE_EXTRA_PARAMS 开启且图像请求同时包含 width 和 height 时,WebP Server 如何裁剪图像,可选参数有:“InterestingNone”,“InterestingEntropy”,“InterestingCentre”,“InterestingAttention”,“InterestringLow”,“InterestingHigh”,“InterestingAll”,你可以在额外参数页面找到更多信息。
- WEBP_STRIP_METADATA=false #是否从图像中删除 EXIF 元数据。
#- WEBP_CONVERT_TYPES=webp
- WEBP_CONVERT_TYPES=avif #WebP Server 尝试转换的图像类型列表,默认为 ["webp"] ,表示它将仅尝试将图像转换为 WebP,可用选项: ["webp","avif","jxl"] 。#avif没法播放gif动图,这点不需要动图就能用。
#- WEBP_ALLOWED_TYPES="*" #允许的图像类型列表,如果您想允许所有图像类型,只需在此处使用 ["*"] 。
#- WEBP_EXHAUST_PATH='' #WebP 图像的缓存目录路径,例如,当 EXHAUST_PATH 设置为 /var/cache/webp 时,您的 webp 图像将保存在 /var/cache/webp/pics/tsuki.jpg.1582558990.webp 。
#- WEBP_IMG_PATH="" #图像目录路径(原始图像),如果您想使用远程后端(例如外部 Nginx 提供的静态网站、阿里云 OSS 或腾讯 COS),请参考远程后端。
- WEBP_QUALITY=50 #图像质量,从 0 到 100,100 表示无损转换。粗糙最低30值,建议30-80之间,我的是75。设50时,jpg>avif=86>1.93m,这个压缩比例我很满意。
#应用场景:原件图片批量上传得到链接,访问加工后的链接得到转换后的图片,提升加载速度。
#- WEBP_PORT="" #监听的端口
#- WEBP_HOST="" #监听的地址
[!提示:]
1.volumes我这边挂载到'/mnt/10t/file/webdav/images',请按照你设置的真实路径去挂载映射到本地目录。 2.WEBP_CONVERT_TYPES=avif,不需要动图gif只有图片的话推荐avif,基于av1编解码器提供更小体积和更高的还原质量。包含gif动态图片的话改成webp即可转化成webp图片。 3.图片质量WEBP_QUALITY=50,实测在质量值=50时,8M的jpg压缩成1.9M的avif。对观感要求极高的可调整到80左右,最高90到96即可,质量100时大概率它的体积是超过原图的。观感最低值设在30即可,低于30可能会过于模糊,数值=10时大部分场景是白点和马赛克噪点。
配置 config.json
{
"HOST": "0.0.0.0",
"PORT": "3333",
"QUALITY": "80",#质量80默认
"IMG_PATH": "./pics",
"EXHAUST_PATH": "./exhaust",
"IMG_MAP": {}, #“IMG映射”:
"ALLOWED_TYPES": ["jpg", "png", "jpeg", "bmp", "gif", "svg", "heic", "nef", "webp"],#“允许的类型”:
"CONVERT_TYPES": ["webp"],#“转换类型”默认 webp/avif
"STRIP_METADATA": true,#“条形元数据
"ENABLE_EXTRA_PARAMS": false,#“启用额外参数
"EXTRA_PARAMS_CROP_INTERESTING": "InterestingAttention",#额外的参数作物有趣
"READ_BUFFER_SIZE": 4096,#“读取缓冲区大小
"CONCURRENCY": 262144,#“并发性”
"DISABLE_KEEPALIVE": false,#禁用保持活动
"CACHE_TTL": 259200,#“缓存TTL
"MAX_CACHE_SIZE": 0#“最大缓存大小
}
[!NOTE] Title 配置 config.json后,默认情况安装config.json设置的环境变量去运作,默认没有配置文件时不支持webp的后缀名文件访问。
启动容器
cd /home/compose/webp-server
docker-compose up -d
停止容器
docker-compose down
快速启停
docker-compose -f /home/compose/webp-server/docker-compose.yml up -d
docker-compose -f /home/compose/webp-server/docker-compose.yml down
[!未证实的部分:请根据自己的情况去配置。] nginx 代理 Nginx 服务器配置 nginx.conf
在 server 节点添加
``` # 访问规则 location ~* .(?:jpg|jpeg|gif|png)$ {
proxy_pass http://127.0.0.1:3333; proxy_set_header X-Real-IP $remote_addr; proxy_hide_header X-Powered-By; proxy_set_header HOST $http_host; add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; }
# MinIO 文件地址 location ^~/minio/ {
# 代理到 webp_server_go proxy_pass http://127.0.0.1:3333;
} ```
重启 nginx 服务
链接 docker webp-server - Search Linux 使用 docker 安装 Webp Server Go 服务器_docker 安装webp-go-CSDN博客
使用 Docker(推荐)| WebP 服务器文档 --- Use with Docker(Recommended) | WebP Server Documentation 配置 | WebP 服务器文档 --- Configuration | WebP Server Documentation