图片显示问题

问题描述

我有两个笔记Linux.md和C-C++.md。起初,Linux.md和C-C++.md是在同一个目录(比如目录AAA),他们引用的图片全在AAA/assets目录下。

现在,我将笔记迁移到Obsidian上,将C-C++.md和AAA/assets目录复制到下图的01-C-C++目录下,而将Linux.md复制到下图的02-Linux目录下,并新建一个空的02-Linux/assets目录。

结果发现,Linux.md下的图片引用居然可以显示正常图片!点进去发现该图片实际存放位置在01-C-C++/assets目录中。

预期效果

预期的效果是02-Linux/Linux.md由于其02-Linux/assets目录下为空而不能够显示图片。

下图我的设置界面

应该只能改成 ./assets/图片.png 这种相对路径的写法。

这个路径解析的逻辑是这样的(比如链接是 [](assets/2025-5-16.png),在文件 Linux/linux.md 中):

  • 首先找到所有叫 2025-5-16.png 的图片
  • 然后比较路径字符串
    • 如果完全匹配,则作为结果返回
    • 尝试匹配后缀,也就是看该图片路径是否以 assets/2025-5-16.png 结尾
    • 如果后缀匹配成功,匹配前缀,也就是看该图片是否在 Linux 文件夹下(与该笔记在同一个父路径下)。匹配成功,放入数组 A。匹配失败,放入数组 B。
    • 合并 A 和 B,作为候选结果(A在前B在后,所以A中的结果优先级高)
  • 在所有候选结果中,选择第一个作为最终结果。

所以 assets/图片.png,可能会选中任意文件夹下面的 assets/图片.png。而如果用相对路径,就更精确一些,会用 Linux/assets/图片.png 来匹配。

1 个赞

不过,现在的实现确实有 bug 。

比如,你可以试试在 Linux/笔记.md 里面引用 ./assets/图片.md,然后把图片放在 Windows/Linux/assets/图片.png,居然也能显示出来。。

目前看来,好像改为这种![](./assets/Linux-01.png)才有效。

但当你更改图像文件名时,如果让它“自定更新文件链接”,会发现它又在引用的时候改为![](assets/Linux-01.png)这种形式