分享我的发现、想法与心得

0%

改造obsidian-local-images

起因

起因是我使用 zoni/obsidian-export 来输出文件。该工具在输出内容时,同目录下的媒体内容带来的麻烦更少。并在 obsidian-local-images的issues#9 中看到类似的问题。为此我决定挑战一下,修改源码。

改造思路

刚开始是想通过阅读插件的源码,看看媒体存放的目录设置与具体存放媒体文件之间是如何运作的。

后来发现这部分的操作都是调用 obsidian 包内对象来实现,所以追本溯源来就找到 obsidianmd/obsidian-sample-plugin (github.com) 官方插件例子。由于官方文档没有详细说明,再顺藤摸瓜找到了 obsidianmd/obsidian-api 中的 obsidian.d.ts文件。里面提供了obsidian软件中的API定义说明,再结合其他在github上的开源插件很快就找到解决办法。

其实获取文件后,能通过文件的parent对象获得所在目录,再结合插件媒体目录的设置,就能得出文件所在的目录地址。就这样下载的图片存放在与文档目录的需求就完成了。

最后我提了PR#47,希望插件作者能快看查阅并通过,这样就能帮助有相同需求的人。

本来以为就这样结束。

再次改造

在后续使用的过程中发现,公众号文章图片会被相同图片替换,这个情况还挺常见。

再次查看插件源代码发现,插件作者打算使用路径地址中位于斜杠最后的字符串作为图片文件标识,结果是图片名字一样,导致无法正常下载图片。

1
2
3
4
5
# 微信图片例子

https://mmbiz.qpic.cn/mmbiz_png/cELMVpPhWOxhLQVsLjqMIvhpgUuBYvboCu6v7OEycA4fDFaR7G0mjbSISBxO8MmpnZLWaMiceM8uEfTnk7YREIg/640?wx_fmt=png

https://mmbiz.qpic.cn/mmbiz_png/cELMVpPhWOxhLQVsLjqMIvhpgUuBYvboSu5bw2FygA5D3DzCTA5jFCia68IHpXmevrH1AwEEGVQBWXyxJ5C7XnA/640?wx_fmt=png

其次就是会拿图片描述作为图片文件命名,但是由于重名处理逻辑也有问题,导致图片只使用了一张。

最后我将这块逻辑改为根据图像数据的md5字符串作为图片名称,相对唯一的标识下,应该不会出现图片重叠至一个文件的情况。

使用改造后的插件

在上个PR提交至现在,发现插件管理者并不活跃,我将插件发布至这个 obsidian-local-images-releases 仓库。

要使用可以在obsidian插件市场先安装 obsidian42-brat [^1]。

然后点击下面按钮:

输入如下内容:

  • Repository:lpreterite/obsidian-local-images-releases
  • Version:1.1.1

提示找不到manifest.json可能是你所在的网段,无法访问Github导致。

接下来,去第三方插件找到 obsidian-local-images 启用就可以了。

具体怎样操作可参考文章中的描述。


Obsidian插件需求不满足,需要二次开发的,欢迎私信我。



[^1]: 基于同步助手 + SimpRead Unreader Sync 的 Obsdian 文献笔记一站式解决方案教程 - 知乎 (zhihu.com)