首先声明,我还是更喜欢老版本印象笔记。最喜欢的点就是他的数据库设计,笔记所有的内容都装进一个exb格式的sql3数据库,名字:name#app.yinxiang.com.exb数据库,这样迁移数据的时候直接备份一个文件即可,而不是joplin那样附件和数据库是分开的设计,虽然可以导出jex,但是不知道为啥就是不喜欢,为啥做不到印象笔记这样的设计呢,毕竟你当成抄的也是evernote(听说),难道是因为做不到数据库增量备份?
而最近发现一个问题,网页上剪藏的图片无法显示,原来是webp图片的原因,当然最新版的印象笔记软件应该是支持了,不过新版软件的数据库大小明显小于旧版的,明显不是完整版的数据库,所以我就弃用了。
因为无法显示webp的原因,有了昨天的帖子:
解决答案就是我帖子里提到的那个js脚本,但是稳定性不行,有时候明明开了脚本,还是无法转换,反复开关几次才能转换。
刚好今天发现,直接把网页源码里图片的webp后缀改为jpg,图片在网页里还是能正常显示,剪藏之后印象笔记也是能正常显示,而不是看到webp的格式文件,刚好昨天找解决方案的时候,看到论坛米老鼠写的webp回退帖子,我昨天试了反正是不行。今天因为手动修改webp格式成功的缘故,又动起了了心思,能不能修改下这个代码让把webp转换为jpg。
然后把这串代码喂给deepseek,让它帮忙解读解读,得到如下回复:
这段代码是一个用于将网页中所有WebP格式图片转换为PNG格式的浏览器书签工具(也称为书签小工具或Bookmarklet)。以下是详细分析:
功能说明
检测WebP图片:查找页面中所有src属性以.webp结尾的标签
转换为PNG:通过Canvas将每张WebP图片转换为PNG格式
替换原图:将转换后的PNG数据替换回原图片元素
代码执行流程
收集页面中所有WebP格式的图片元素
使用Canvas绘制每张图片(这会自动将WebP转换为可绘制格式)
通过canvas.toDataURL(“image/png”)将画布内容导出为PNG格式的Data URL
用转换后的PNG数据替换原图片的src属性,
递归处理所有收集到的图片,完成后显示提示
原来是这样的工作流畅,然后我直接让他写个代码:
能不能帮我修改一下代码,我需要你查找页面中所有src属性以.webp结尾的标签,然后直接把图片的webp后缀直接改为jpg
然后这货竟然不懂了,写了一个html的代码。
我再三提示结合上面的js代码,终于写出来一个可用的js书签代码了,测试,成功了,太激动了,哈哈。
顺便问下论坛里懂代码的,如何让这个js代码继续改进,放进纂改猴里面,以后网页内的所有webp格式图片自动替换后缀为jpg啊,而不需要我手动点击去替换呢。
这里感谢 @dms 帖子的源代码,我测试过程中就第一个图片转换为下载.png,后面还是webp。
webp图片测试网址-豆瓣日出爱好者小组:日出前的朝霞
tsss
2
// ==UserScript==
// @name webp2jpg
// @version 2025-09-07
// @description 改图片后缀
// @author dxsc
// @match *://*/*
// @match https://*
// @icon https://wdcdn.qpic.cn/MTMxMDI2NjEzNzM4MDczNDg_25385_j1AdmJ2sjGxuwHNU_1757234241
// ==/UserScript==
(function() {
document.querySelectorAll("img[src$='.webp']").forEach(img => {img.src = img.src.replace(/\.webp$/i,".jpg");});
})();
借助deekseek已经写出来了。
原来改后缀是以这个格式从新发起请求,然后服务器给你数据。
现在遇到的问题是,尤其是知乎的图片,后缀是pic(导致无法提交请求),而实际返回图片内容类型是webp,导致还是有无法显示的问题。
即使我用了不支持webp的火狐旧浏览器,知乎也不对图片进行调整,仍然响应webp的图片。
只能想新办法了,所有的图片提取连接后重新进行格式转换。
也是奇怪,这个图片在代码里显示的是jpg,但是另存为就是webp,包括火狐查看图片类型也说是webp。
昨天的疑问终于想通了。
yazii
(Yazii!)
4
问题的关键这是一个文件名为jpg的webp文件,所以保存的时候浏览器自动选择了正确后缀.
为了确认这一点,你可以安装mediainfo来看图片到底是什么编码格式
文件实际格式与后缀名不一致大多数情况没有影响,小部分软件会打不开文件(比如ps).
上图我测试了,即使是jpg的后缀,本质还是webp图片,文件浏览器【内容类型】即可看到,还有这种图片用文本编辑器打开,看到的是riffwebp开头(ds教我的),而jfif就是jpg图片。
解决方案三个办法:
1,js脚本对于本页的所有图片进行二次转换生成jpg图片(替换掉网址)。
2,数据库里图片格式转换
3,升级支持webp的版本,我试试第三个方案吧
@tiger 我借地插一句,好像Zotero也是这么设计的。
我更喜欢一个数据库文件直接搬走那种方式,这样看来只能定死在印象笔记了。唯一的遗憾是不支持webp图片,从6.17,6.18,6.21,6.24,6.25,都试验了一遍,都不能显示webp图片,最新版本虽然支持但不是数据库存放形式,只能弃用。
这些版本真是垃圾,还不如更早的5.91.8742版本,pdf一放大,其他笔记的字体也跟着变大变小。
你要不说,我也没留意到这个问题,这样确实被软件绑死了。
不过关于印象笔记,迁移的人不少,应该有解决方案吧。
我说的定死,我是指所有这些笔记软件中,只有印象笔记的老版本是完全的数据库存储,所以就拿他当离线笔记软件。即使哪天倒闭了也不怕。
tiger
(小虎王)
10
是的,这样做的好处就是不会产生过多的碎片文件,反面例子是为知笔记。而将数据库与附件集中存储的弊端则在于一个庞大的存储库文件,在读取速度、同步速度上都很慢啦,例子就是 myBase 了
1 个赞
joplin是文字放进数据库,附件没放进数据库,太可惜了,否则我就转这个软件了。
随着电脑的性能越来越强,弊端这些这些都不是问题吧。
是不是目前还在开发的笔记软件中,没有此种结构的?
不过你楼下 @tiger 说的myBase也是这种结构。
你的碎片文件指的是什么?我Zotero之前用的是为知,没注意到有什么碎片。
不过速度确实会成为问题,但是附件独立迁移就是问题,最后的折中方案可能就是Obsidian了 
tiger
(小虎王)
13
是指受到磁盘存储技术限制,而导致同一个文件可能会分布在磁盘的不同位置,在读取时需要更多的时间才能完整读取。
1 个赞
我怎么觉得这个问题和文件系统原理有关,和文件存储模式关系不大?
有没有什么js函数,可以将网页上的图片进行格式转换为jpg啊,这种替换的方法有的网站不起作用,主要还是看服务器是否接受这种申请。
tsss
16
我也不太懂,我让AI帮忙写了一段代码,可在浏览器控制台中执行
另外可能需要安装cors解除封锁相关浏览器扩展
async function convertWebpToJpg(imgElement) {
return new Promise((resolve, reject) => {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// 设置 crossOrigin 属性
imgElement.crossOrigin = "Anonymous";
imgElement.onload = () => {
canvas.width = imgElement.naturalWidth;
canvas.height = imgElement.naturalHeight;
ctx.drawImage(imgElement, 0, 0);
const dataUrl = canvas.toDataURL('image/jpeg', 0.9);
resolve(dataUrl);
};
imgElement.onerror = (err) => {
reject(err);
};
// 重新触发加载,确保 crossOrigin 生效
imgElement.src = imgElement.src;
});
}
async function main() {
const images = document.querySelectorAll('img[src$=".webp"]');
for (const img of images) {
try {
const jpgDataUrl = await convertWebpToJpg(img);
img.src = jpgDataUrl;
console.log('转换成功:', img.src);
} catch (err) {
console.error('转换失败:', img.src, err);
}
}
}
main();