图片本地化助手(picget)
写文章时从别处复制过来的图片,地址还挂在别人的服务器上。对方删图、换域名、加上防盗链,文章里就只剩破图。这个插件负责把它们搬回自己家:下载到本站上传目录、把正文里的地址换成自己的、同时在后台「资源」库里登记一条记录。





功能一览
| 功能 | 说明 |
|---|---|
| 一键本地化 | 编辑页顶部按钮,或 Ctrl + Shift + L,逐张抓取并回填正文 |
| 保存时自动本地化 | 编辑页顶部的开关就是设置页这一个,点一下即记住;开启后发布、存草稿自动处理 |
| 正文 / 摘要 / 封面 | 三个字段一起处理,不漏图 |
| 接入资源库 | 下载的图片出现在后台「资源」中,可继续复用、分类、删除 |
| 落盘前压缩 | 大图存盘前转成 WebP,长宽画面不变,体积一般省一半以上 |
| 上传的图也能压 | 开启后自己上传的图片存盘时同样压一道,全站上传入口一体处理 |
| 不重复下载 | 记住「远程地址 → 本站地址」,同一张图只抓一次 |
| 防盗链处理 | 三种 Referer 策略,抓取失败时可换一种再试 |
| 进度可视 | 实时显示每张图的成功 / 跳过 / 失败原因 |
| 深浅色自适应 | 界面配色低饱和,跟随后台窄屏与系统深色模式 |
一键图片本地化
编辑或新建文章时,正文上方「+ 资源媒体库」旁边并排两个控件,在同一条中线上:
- 一键图片本地化:显示当前正文里待处理的外链张数。点击后逐张抓取,进度条实时推进,
处理完把新地址直接回填进编辑器,正文结构、图片顺序、alt 文本都不改动。 - 保存时自动本地化:与插件设置里的是同一个开关,点一下就记住,对之后每一次保存生效。
开着则保存时自动抓取外链图片,关掉则只在点左侧按钮时处理。
处理完成后会给出结果明细:成功、跳过、失败各多少张,以及每张图的具体原因
(例如「命中缓存」「已本地化(2.05 KB)」「远程内容不是图片」「超出体积上限」)。
本地化是单向的:插件只把外链换成本站地址,不提供「一键撤销」。搬错了想改回去,
在编辑器里把地址换回原来的外链再保存即可,
下载下来的图片属于站点资源,可在后台「资源」里自行删除。
同一个地址在正文里出现多次,只会下载一次;已经本地化过的地址再次点击会直接命中缓存,不再发请求。
保存时自动本地化
编辑页顶部的开关与插件设置里的是同一个,改哪边都一样:设置页改完要点「保存设置」,
编辑页上点一下立刻生效并记住,下次进编辑页、换台电脑登录都是这个状态。
- 开着:发布、手动存草稿、编辑器自动存草稿都会先把正文 / 摘要 / 封面的外链图片抓回本站再落库;
- 关掉:保存动作完全不联网,只在点「一键图片本地化」时处理。
自动保存的草稿同样会处理(草稿正文里同样是外链,不处理就一直在外面挂着),
只是这类保存不刷新设置页的「最近一次处理」时间,避免高频草稿把时间刷花。
同一张图反复保存只会下载一次。不想让草稿也抓图,就把顶部开关关掉。
正文、摘要、封面都处理
不只正文。摘要里手写的图片、封面框里填的外链地址,都会一并抓取并替换,
开关在设置页里,默认都是开启的。
下载下来的图会进资源库
图片落盘走系统自带的上传流程,目录按年月分档、存进资源库这些行为和你手动上传完全一致,
下载完成后在后台「资源」列表里就能看到,可以继续复用、换分类、删除。
正文里用的是文件本体,所以这条记录也指向原图;开了后台「生成缩略图」时顺手生成的那张小图
没有地方引用它,落盘时会直接删掉,不让它变成一条记录删完还剩个空文件的孤儿
(资源库列表照常显示这张图,只是不另存一份小图)。
登记时记录的是远程原始文件名(比如 hero-banner-01.png),不是本地随机生成名。
这样带来两个好处:资源库里的名字可读;而且即使你清掉了地址映射缓存、换了服务器或迁移了站点,
插件还能按文件名去资源库里认回同一张图,直接复用,不会重复下载占空间。
为避免张冠李戴,文件名主体太短(如 logo.png、ab.png 这类通用名)时不做复用判断,宁可重新下载一次。
映射表指向的文件如果已经在资源库里被删掉,插件会确认文件是否真的还在:
不在了就当作没命中,清掉这条废记录并重新下载一张,绝不会往正文里写一个打不开的地址。
落盘前压缩成 WebP
抓回来的 jpg、png、bmp 在存盘前会转成 WebP:长宽和画面一点不动,体积一般能省一半以上,
一篇多图的文章能明显小下来。正文里回填的地址、资源库里登记的记录,都是转换之后的那个文件,
不会出现「记录写的是原图、盘上却是另一个文件」这种对不上的情况。
不是所有图都会转,下面这些一律原样保存:
- 本来就带不动的格式:gif、webp、avif、svg;动起来的 PNG(APNG)也不转,转了只剩一帧;
- 16 KB 以下的小图:省不出可见的体积,白挨一次编解码;
- 转完反而没小够一成的图:保留原图,不做赔本买卖;
- 服务器 PHP 没有 WebP 写入能力,或图片尺寸太大、内存不够用时:设置页会说明这一项当前不生效。
结果明细会直接告诉你这张图有没有被压:压过的写「已本地化(254.63 KB,原图 303.28 KB)」,
没压的只写「已本地化(303.28 KB)」。
在意兼容性可以把这一项关掉(设置页「保存时压缩图片(转成 WebP)」)。
只在不支持 WebP 的老浏览器(例如 IE11)上会有影响:转过的那些图它们显示不出来。
上传的图片也能压
设置页里另有一个「上传时也压缩(转成 WebP)」,默认关闭。打开后,你从电脑往后台上传图片,
文件存好之后会顺手压一道:正文里插入的是压缩后的地址,资源库里登记的也是它。
判定标准与上面完全一样——只动 jpg / png / bmp、只动 16 KB 以上的、省不下一成就不动。
处理范围是全站上传:资源库与编辑器的上传、站点 logo、会员头像、开放接口都走同一道。
logo 和头像一般只有几 KB,够不上 16 KB 的门槛,通常不会被改到。
开启前需要知道两件事:
- 这一项会让本插件接管站点的上传入口,和云存储 / 七牛 / OSS 类插件互斥,两者只能留一个。
关闭时完全不介入,不影响别的上传插件。 - 站点开启了「生成缩略图」时,那张缩略图会跟着原图一起换格式(
thum-xxx.jpg→thum-xxx.webp),
资源库记录、磁盘文件、正文地址三者依旧一一对应。在资源库里删除这条记录,核心会把这一对一起删掉,
删完磁盘上不留多余文件——和没开压缩时的行为完全相同。(删记录会连正文里的图一起没,
这是 emlog 本来的行为,开不开压缩都一样。)
抓取策略与安全
- 只处理 http / https 地址,
data:、blob:、锚点、相对路径一律跳过; - 服务器上找得到 CA 根证书时会校验 HTTPS 证书,防止图片在半路被人换掉;
- 默认拒绝解析到内网与保留地址的主机,避免被利用来探测服务器(自建内网图床才需要显式放开);
- 以图片的真实内容判定类型,而不是只看响应头,对方返回错误页或防盗链提示图时会主动放弃,
不会把垃圾文件存进资源库; - 边下载边限制体积,单张超限立即中断,不会因为一张大图卡住整篇;
- 单张超时可控,慢站不会拖垮整篇处理;
- SVG 含脚本能力,可以单独关闭。
支持的编辑器
| 编辑器 | 说明 |
|---|---|
| Editormd(emlog 自带) | Markdown |
| TinyMCE(含商店的编辑器插件,实测 8.4) | HTML |
| KindEditor | HTML |
| wangEditor(v4 / v5) | HTML |
| Vditor | Markdown |
| 裸 CodeMirror | Markdown |
| 其它 / 认不出 | 直接读写 textarea 或 contenteditable 兜底 |
适配层按「先具体后通用」的顺序探测,认不出就退回兜底方案,不会因为某个编辑器版本差异整块失效。
回填统一以服务端改写结果为准(服务端同时认 Markdown 与 HTML),
所以富文本编辑器不需要另写一套替换逻辑。
Markdown 图片、HTML 的单引号 / 双引号 / 无引号 img 标签三种写法都能识别。
设置项
| 设置项 | 默认值 | 说明 |
|---|---|---|
| 保存时自动本地化 | 关闭 | 开启后保存文章即抓取外链图片;编辑页顶部那个开关就是这一项,在那里点一下不用保存设置页 |
| 同时处理文章摘要 | 开启 | 摘要里手写的图片同样被抓取 |
| 同时处理文章封面 | 开启 | 封面填写了外链地址时一并下载到本站 |
| 单篇最多处理张数 | 30 | 取值范围 1–200,超出部分明确提示并跳过,可再点一次继续 |
| 单张体积上限 | 5 MB | 实际生效值不会超过 PHP 的上传限制 |
| 单张超时 | 20 秒 | 取值范围 5–120 秒 |
| 防盗链处理 | 携带图片所在站点的 Referer | 另有「携带本站 Referer」「不携带」两种 |
| 允许本地化 SVG | 开启 | 来源不可信时建议关闭 |
| 允许抓取内网地址 | 关闭 | 仅自建内网图床时才需要开启 |
| 保存时压缩图片(转成 WebP) | 开启 | 抓回来的图 jpg、png、bmp 存盘前转 WebP;gif、webp、avif、svg 与 16 KB 以下小图不转 |
| 上传时也压缩(转成 WebP) | 关闭 | 自己上传的图存盘时同样压一道;开启后会接管站点上传入口,与云存储类插件互斥 |
设置页顶部还有三项统计:已本地化图片张数、地址映射缓存条数、最近一次处理时间。
「已本地化图片」数的是本插件抓下来、此刻仍留在站点上的图片:同一张图用在多篇文章里只算一张,
在后台「资源」里删掉一张,这个数就跟着少一张。它不是从安装到现在处理过的总次数,
反复编辑同一批文章不会把数字抬高。
另有一个「清除地址映射缓存」按钮——清掉是安全的,插件会退回按文件名去资源库认图。
常见问题
抓取失败怎么办?
先切换设置里的「防盗链处理」,多数图床会校验来源,换成「携带图片所在站点的 Referer」即可。
若提示「远程内容不是图片」,说明对方返回的是错误页或防盗链提示图,插件会主动放弃。
保存变慢?
开启「保存时自动本地化」后,保存耗时会加上抓图时间。图片较多时建议只用一键按钮,处理过程是可见的。
插件已内置单张体积上限与超时,不会因为个别大图卡住整篇。
会不会重复下载同一张图?
不会,有两道保险:地址映射表记着「远程地址 → 本站地址」,同一个地址再来直接替换,不发请求;
即使映射表被清空,插件还会按远程原始文件名去资源库里认,找到同名且文件仍在的图片就直接复用。
为什么有的图转成了 WebP,有的没有?
转 WebP 是有条件的:格式得是 jpg / png / bmp、原图得大于 16 KB、转完至少得省下一成体积,
四个条件缺一个就保留原图。gif、webp、avif、svg 和动起来的 PNG 根本不参与转换。
明细里写着「已本地化(新体积,原图旧体积)」的就是压过的,只写一个体积的没压。
担心老浏览器不支持 WebP,可以在设置页把「保存时压缩图片(转成 WebP)」关掉。
我刚上传的图怎么没转成 WebP?
上传那条要单独开:设置页「上传时也压缩(转成 WebP)」默认是关闭的。
开着还没转,就是上面那几个条件没满足(格式、16 KB 门槛、至少省下一成)。
只有走上传表单的图片才会被处理,AI 生成图片那种由服务端直接落盘的不经过这一步。
图片没有出现在资源库?
正常情况下都会出现。如果 content/uploadfile 目录不可写,图片无法落盘,设置页顶部会给出提示。
单页(page)能处理吗?
可以。单页与文章都在内容落库后定向更新,推荐单页也用一键按钮处理,体验更直观。
删除插件会留下什么?
设置、映射缓存、统计全部存在核心的 Storage 里,不创建自定义数据表、不修改核心表结构,
删除插件时核心会自动清理这些记录。已经下载到 content/uploadfile/ 的图片属于站点资源,不会被删除,
可以在「资源」里自行管理。



