使用 onebox 图片作为主题缩略图

为什么 API 经常无法生成缩略图,即使已下载了尺寸足够大的图片?

例如,如果您在首帖中粘贴以下内容:

该 onebox 会下载一张尺寸足够大的图片,分辨率为 690 x 465:

但即便如此,主题仍未生成缩略图。

1 个赞

这并不取决于图片的大小。通常情况下,我们不会从单栏信息框(oneboxes)中提取图片,因为在很多情况下,它们不适合作为缩略图。例如,我们在 Meta 上经常看到 GitHub 仓库链接,比如:

没人希望我的脸被放大并变成话题缩略图;)

3 个赞

嗯,这对 Meta 来说确实很具体。我们的社区里没有任何 GitHub 链接,内容全是新闻,应该使用 onebox 图片。这极大地限制了缩略图的展示,仅仅是因为 Meta 上的这个“头像”问题。有没有可能调整一下,允许从 onebox 中添加图片?我想,许多社区并不在意 GitHub 的“头像”问题。

3 个赞

我当然愿意在这里进行改进。我知道 @merefield 也对这个逻辑感兴趣。这个改动需要在核心部分进行,而不是作为插件,所以我会将其单独开一个主题讨论。

现有的逻辑如下:

也许我们可以为某些类型的一键嵌入(例如 GitHub)添加一个 .no-thumbnail 类,然后让 Discourse 仅忽略这些,同时保留其他一键嵌入的图片。

我会在该主题上标记为“欢迎提交 PR

5 个赞

那太好了。目前我们 90% 的话题都没有缩略图,尽管它们本可以有。正如之前所说,这个 GitHub 议题是开发者社区的一个非常特殊的边界情况,而我们绝大多数人却因为这个问题,无法为那些本可以拥有缩略图的话题显示缩略图。

2 个赞

我完全同意!!!对于新闻聚合器或任何其他以转载为主的页面来说,缺少相关缩略图可不是好事。

如果你们不尽快集成这个功能,有没有什么办法可以在我自己托管的发行版上实现呢?

1 个赞

是的,目前这并未被提上日程,因为来自 GitHub 的“头像”可能在 Meta 等开发者社区中被渲染,但大多数社区并不关心“头像”,而是希望尽可能多地展示缩略图,尤其是当主题帖(OP)已有足够大的单栏预览图时。

那个 OP 示例在主题列表预览中渲染正常,因为我在插件中使用了更宽泛的筛选条件:

  def extract_images_for_post
    # 所有带有 src 属性的图片
    @doc.css("img[src]") -
    # 减去表情符号
    @doc.css("img.emoji") -
    # 减去引用块内的图片
    @doc.css(".quote img") -
    # 减去 onebox 站点图标
    @doc.css("img.site-icon") -
    # 减去 onebox 头像
    @doc.css("img.onebox-avatar") # 比 Discourse 核心更宽泛的筛选条件
  end

来源:discourse-topic-previews-sidecar/lib/cooked_post_processor_edits.rb at f4332f9742a37827fd6364b2365c45524f1e7faf · merefield/discourse-topic-previews-sidecar · GitHub

1 个赞

是的,谢谢 @merefield,但我们只使用 @david 的主题组件,而不是 TLP TC。不过,如果 @team 在这个问题上没有进展或提供选项,我可能会利用你的评估来修补核心代码。

1 个赞

上述渲染效果来自 TLP TC,不过是的,我使用了一个后端插件(主题“侧车”)来修改 Ruby 代码 :)。https://github.com/merefield/discourse-topic-previews/tree/theme_sidecar 我理解如果是托管服务,这可能不是一个可行的选项。

3 个赞

这完全在讨论范围内,因此它被打上了 pr-welcome 标签 :smiley:

请查看 这篇帖子 以获取实施的起点。

4 个赞

@merefield 能否请您提交这个 PR?不幸的是,我对 Ruby 完全陌生。或者,提交 PR 的流程是怎样的?

1 个赞

@david 我非常乐意能够从插件中移除此覆盖,并同意核心解决方案是最佳选择。

3 个赞

@Terrapop 这里是 Contributing to Discourse development

我本想更直接地协助此事,但目前客户工作非常繁忙。

2 个赞

明白了。目前我只有一个简单的 Docker 开发环境,用于开发一些基础插件和核心补丁。在有人审查这个问题并通过您的评估进行修复之前,我会先等待。

这里的工作并非抽象项目,因为你需要修改测试用例,并跨两个组件(Discourse 和 Discourse One-Box)开展工作。但绝对值得去做!

顺便一提,Ruby 没什么好怕的,就像 Ember 一样 :wink:

3 个赞

是的,但不幸的是,这显然超出了我目前的范围和能力。

1 个赞

作为变通方法,我通常会手动将图片复制粘贴到 Whisper 中,然后从中选择缩略图。

自动处理会更理想,或许可以添加一个配置项,指定某些域名的缩略图不应从 One Boxes 中提取(例如用于覆盖 GitHub 的情况)。

3 个赞

同意。我们使用了 @merefield 的代码片段,通过一个小型插件来覆盖核心功能。但核心团队本应能轻松提供开箱即用的解决方案。仅仅因为有人害怕在 GitHub 上暴露自己的头像而缺少这个功能,实在有些懈怠。

1 个赞

我刚合并了 https://github.com/discourse/discourse/commit/b770c30391d0294a498d73e6a5272fb437291833,该提交允许将 onebox 图片选为主题缩略图。目前针对 GitHub onebox 设置了特定例外,如有需要我们可以添加更多例外。

(cc @Terrapop @merefield)

10 个赞