WebP图片压缩Emlog插件详细使用说明

WebP图片压缩Emlog插件【webp_compress】详细使用说明

将 Emlog 中上传的图片自动转换为 WebP 格式,并限制宽度,显著节省存储空间和带宽。支持批量转换历史图片。

功能特性

  • 自动转换:新上传的 JPG/PNG/GIF/BMP 图片自动转为 WebP,并等比缩放到设定宽度
  • 缩略图豁免:系统生成的缩略图(thum- 前缀)不会被转换
  • 宽度限制:可自定义最大宽度(默认 600px),超出则等比缩小
  • 批量转换:一键扫描并转换所有历史图片
  • URL 修复:自动更新文章中已转换图片的引用路径,支持文章内容、封面、摘要、主题配置(含序列化数据)
  • 前台过滤:可选开启前台输出时替换旧图片 URL,兼容遗漏场景
  • 双重编码支持:优先使用 GD 的 imagewebp(),不支持时自动降级到 Imagick

环境要求

  • Emlog:任何支持插件系统的版本
  • PHP:7.4+
  • GD 库或 Imagick:至少一项支持 WebP 输出

WebP 支持检测

插件设置页顶部会显示服务器环境检测结果:

扩展 状态
GD WebP 需要 PHP 编译时加 --with-webp
Imagick WebP 需要安装 ImageMagick + WebP 委托库

两项都不支持时,批量转换和自动转换均无法工作。

安装

  1. webp_compress 整个目录上传到 Emlog 的 content/plugins/ 目录下
  2. 登录 Emlog 后台 → 插件 → 找到「WebP图片压缩」→ 点击「启用」
  3. 进入插件设置页,按需调整配置

8a5f1780193554.webp

使用说明

基本设置

  • 最大宽度:图片宽度超过此值将被等比缩小。设为较大值(如 2000)可仅转换格式不改变尺寸
  • WebP 质量:1-100,推荐 80。数值越高画质越好,文件也越大
  • 前台过滤开关:开启后,前台文章页会自动把 JPG/PNG/GIF 图片 URL 替换为 WebP(仅限单篇文章页)

批量转换历史图片

  1. 点击「扫描待转换图片」,列出所有未转换的图片
  2. 点击「开始转换全部」,逐张转换并显示进度
  3. 转换完成后,点击「修复文章URL」更新文章中已转换图片的引用地址(带进度条)

注意:转换操作不可逆,原始文件会被删除。

修复文章 URL

当批量转换完成后,文章内容、封面、摘要中引用的图片地址仍然是旧的 JPG/PNG 路径,需要点击此按钮进行更新。操作分三个阶段:

  1. 扫描:查找所有已转换的 WebP 图片
  2. 逐张修复:在文章内容、封面、摘要中替换旧路径
  3. 最终处理:更新系统配置(包括主题设置中的路径),重建缓存

文件结构

content/plugins/webp_compress/
├── README.md                     # 本说明文件
├── webp_compress.php             # 主文件:钩子注册 + 上传处理 + 转换逻辑 + 内容过滤
├── webp_compress_callback.php    # 生命周期回调:激活初始化、卸载清理
└── webp_compress_setting.php     # 后台设置页:配置表单 + 批量转换 + URL 修复

webp_compress.php

钩子 类型 用途
upload_media doOnceAction 接管上传流程,自动转 WebP
del_media doAction 删除媒体时清理孤儿缩略图
article_content_echo doMultiAction 前台文章页输出过滤,替换旧图片 URL

核心函数:

函数 说明
webp_compress_upload_handler() 上传处理器,调用系统 upload() 后执行转换
webp_compress_do_convert() WebP 转换 + 尺寸缩放,含 GD 和 Imagick 双引擎
webp_compress_del_media() 清理 orphan 缩略图文件
webp_compress_content_filter() 前台内容输出过滤,正则替换图片 URL
webp_compress_has_webp_support() 检测服务器 WebP 输出能力

webp_compress_setting.php

AJAX 接口:

action 用途
scan 扫描未转换图片
convert 转换单张图片并更新文章 URL
fix_scan 扫描已转换的图片
fix_one 修复单张图片在文章中的引用
fix_finalize 更新系统配置缓存

数据库操作

插件不创建自定义数据表,使用 Emlog 的 Storage 类存储配置。批量转换和 URL 修复操作会更新以下系统表:

  • attachment:更新文件路径、类型、尺寸
  • blog:更新 contentcoverexcerpt 中的图片 URL
  • options:更新序列化数据(如主题设置中的 logo 路径)

已知限制

  • article_content_echo 钩子仅在单篇文章页触发,列表页不生效
  • 建议转换完成后使用「修复文章URL」功能更新数据库,而非依赖前台过滤器

卸载

在后台插件列表点击「卸载」即可,插件会自动清除所有配置数据。此操作不会删除已转换的 WebP 图片文件。

0 0

评论区 (2)

发表评论

共有 2 条评论

avatar
像素控1 个月前

批量转换直接删除原始文件这个设计有点冒险,万一WebP质量不满意或者某些特殊场景不兼容就尴尬了。建议加个“保留原图副本”的开关,或者像站长工具那样移到回收站,留个后悔药。

avatar
隔壁老王的博客1 个月前

插件功能挺全的,不过建议加个“保留原始文件”的选项,直接删除原图有点冒险,万一转换后效果不理想就麻烦了。另外GIF动图转WebP会丢失动画,能不能加个检测机制自动跳过?