dataview图片显示问题

之前dataview索引出来的图片无法显示,经过不断尝试修改,感谢lazyloong大佬的指点和帮助.

现对dateview图片显示方法进行汇总:

  1. 只显示指定路径下的图片,可使用以下图片链接
  • ![[图片名]]
  • ![](相对路径/图片名) 其中相对路径前不需要加../
    代码如下:
const term = "测试"
const files = dv.pages()
const b = files.map(async function(p){
var x = await app.vault.readRaw(p.file.path);
x = x.split("\n## ").filter(p=>p.slice(0,term.length)==term)[0];
x = x.replace(/!\[(.*?)\]\((.*?)\)/g, function(match, p1, p2) { 
  if (p2.startsWith("http")) {
    // 如果是网络图片
    return "<img src=\""+p2+"\">"
  } else {
    // 如果是本地图片,转换为<img>标签
    return "<img src=\""+encodeURI(app.vault.adapter.basePath+"/"+p2)+"\">";
  }
});
x = x.replace(/!\[\[(.*?)\]\]/g, function(match, p1) { //![[]]类型
  // 转换为<img>标签
  return "<img src=\""+encodeURI(app.vault.adapter.basePath+"/13database/assets/"+p1)+"\">";
});

dv.header(3,p.file.link);
dv.paragraph(x.slice(term.length));
dv.paragraph(app.vault.adapter.basePath)
})

其中app.vault.adapter.basePath先获取obsidin库地址再加相对路径
效果展示:

2.如果没有同步,多设备共享的要求可以去掉上面的路径代码只用<img>等部分

3,使用网图/图床等型式的图片,上述代码也可达成目的
或者只用

x = x.replace(/![.?](.?)|![[.*?]]/g, function(match) { return match;});

也可达成目的
最后再次感谢lazyloong大佬

3 个赞

img我测试过无成功,也试过手工拼出绝对路径,也不成。

你这段代码,试过安卓和苹果端都有效吗?

1 个赞

测试了。
在windows下,确是可以显示本地图片了,但在安卓上,同样的脚本就不显示了,不具通用性。

:sob: :sob: :sob: :sob: :sob:刚刚在安卓上测试了确实如此, 经逐级目录测试html 的img确实不能显示
等我今天晚上查一查

https://stackoverflow.com/questions/27167150/android-xdk-intel-html5-img-src-width-file-storage-sdcard0-doest-work可能是安卓的权限问题

但是搞这个安卓这个权限好像有点硬核
我测试了一下在win端导出pdf是正常的,而且我的需求是汇总题目,所以我目前的思路是导出pdf(例如我可以加空白做成习题册)在安卓上查看.
至于图片最终在安卓端显示的方法,我目前的想法有:
1.使用图床或者网图
2.寻找其他可以在ob上显示图片的方法,不使用html
3.还是使用![[]]显示图片,但是需要继续优化代码
4.坐等dataview那边修复这个问题
你有什么想法或者进展,咱们可以相互交流

而且可以直接用html改变图片参数,只是实时性可能差点

所以dataviewjs在移动端是没有办法显示图片了对吗?

您好,请问「app.vault.adapter.basePath先获取obsidin库地址再加相对路径」这一步能不能再说具体一些,或给一个示例(我看您图片里的还是这串代码)。谢谢您

你好,我在 DataviewJS 汇总全文及特定标题下内容并解决图片显示痛点 中基于本话题代码做了优化,可供你参考。