s1syphos / kirby-webp
为 Kirby 生成 WebP 图像
Requires
- rosell-dk/webp-convert: dev-patch-1
README
此插件会在您上传的 JPG 和 PNG 图像旁边生成 WebP 图像,所以您无需自己操作。
目录
它有什么用?
绝对……更小的图像尺寸
WebP 是一种用于网页上各种摄影、透明和图形图像的损失压缩和无损压缩方法。损失压缩的程度可以调整,因此用户可以在文件大小和图像质量之间进行权衡。WebP 通常比 JPEG 和 JPEG 2000 平均压缩率高 30%,而不会损失图像质量(参见 比较研究)。
WebP 图像的当前 浏览器支持 挺不错的(Chrome、Opera 以及大多数移动浏览器),尽管很大程度上取决于您的目标地区(从北美(60%)和欧洲(65%)到非洲和南美洲的 80% 以上)。
有关更多信息,包括批评,请参阅其 维基百科文章。话虽如此,另一种针对替代 JPEG 的有趣方法是 Fabrice Bellard 的 "更好的便携式图形"(BPG)格式。
入门
使用以下方法之一安装并使用 kirby-webp
Composer
composer require S1SYPHOS/kirby-webp:dev-composer
Git 子模块
如果您熟悉 Git,您可以将其作为 子模块 下载此插件
git submodule add https://github.com/S1SYPHOS/kirby-webp.git site/plugins/kirby-webp
克隆或下载
激活插件
在您的 config.php
中使用以下行激活插件
c::set('plugin.kirby-webp', true);
配置
上传一些图像后,您现在正式准备好提供它们新生成的 WebP 版本。
Apache
如果您使用 Apache 作为您的 Web 服务器,请将以下行添加到您的 .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
# Checking for WebP browser support ..
RewriteCond %{HTTP_ACCEPT} image/webp
# .. and if there's a WebP version for the requested image
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
# Well, then go for it & serve WebP instead
RewriteRule (.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1]
</IfModule>
<IfModule mod_headers.c>
Header append Vary Accept env=REDIRECT_accept
</IfModule>
<IfModule mod_mime.c>
AddType image/webp .webp
</IfModule>
NGINX
如果您正在使用 NGINX 作为您的 web 服务器,请在您的虚拟主机设置中添加以下几行(更多信息请参阅 此处 或 此处)
// First, make sure that NGINX' `mime.types` file includes 'image/webp webp'
include /etc/nginx/mime.types;
// Checking if HTTP's `ACCEPT` header contains 'webp'
map $http_accept $webp_suffix {
default "";
"~*webp" ".webp";
}
server {
// ...
// Checking if there's a WebP version for the requested image ..
location ~* ^.+\.(jpe?g|png)$ {
add_header Vary Accept;
// .. and if so, serving it
try_files $1$webp_ext $uri =404;
}
}
选项
将 kirby-webp
选项修改为满足您的需求
选项 | 类型 | 默认值 | 描述 |
---|---|---|---|
plugin.kirby-webp.hooks |
数组 | ['upload'] |
包含所有应用于 WebP 生成 panel.file.* 的 钩子(允许的值有 upload 、update 、rename 和 replace )。 |
plugin.kirby-webp.quality |
整数 | 90 |
定义 WebP 图像质量(范围从 0 到 100)。 |
plugin.kirby-webp.stripMetadata |
布尔值 | true |
可选地启用/禁用将 JPEG 元数据传输到 WebP 图像。 |
plugin.kirby-webp.convertedImage |
布尔值 | true |
可选地启用/禁用输出转换后的图像(false 将导致输出有关转换过程文本信息)。 |
plugin.kirby-webp.serveOriginalOnFail |
布尔值 | true |
定义在所有转换器失败时的行为 - 默认情况下,将提供原始图像,而 false 将生成带有错误信息的图像。 |
plugin.kirby-webp.converters |
数组 | ['gd', 'cwebp'] |
定义所有支持转换器的期望执行顺序(允许的值有 imagick 、cwebp 、gd 和 ewww )。请注意,这仅更改它们的顺序,但不会删除任何一个。 |
故障排除
尽管指出发生了“意外错误”,但在重命名/更新图像后生成的 WebP 仍然工作 - replace
完全不起作用 .. 欢迎提交 PR 🍾
因此,默认情况下只包含 upload
。如果您想进一步调查这个问题,或者不太在意错误,请在您的 config.php
中使用 c::set('plugin.webp.actions', ['upload', 'update', 'rename', 'replace']);
。
致谢 / 许可证
kirby-webp
基于 Bjørn Rosell 的 PHP 库 webp-convert
。它受 MIT 许可证 的约束,但在生产环境中使用 Kirby 需要您 购买许可证。您准备好下一步了吗?
特别感谢
我想感谢所有制作出色软件的人 - 你们都很棒。另外,我总是感谢反馈和错误报告 :)