3D 模型编辑器 Blockbench 如何使用 EyeDropper API 让用户随时随地选择颜色

EyeDropper API 提供了一种创建取色器工具的机制,让用户可以从屏幕(包括浏览器窗口之外)中采样颜色。了解 3D 模型编辑器 Blockbench 如何在其代码库中使用此 API。

简介

(本文还提供视频形式。)

Blockbench 是一款免费的现代化模型编辑器,适用于具有像素艺术纹理的低多边形模型。如果您曾玩过 Minecraft,那么很有可能见过使用 Blockbench 创建的资源,例如在《洞穴与山崖》更新第 1 部分中添加到 Minecraft 中的山羊。采用 GPL 第 3 版许可的 Blockbench 代码在 GitHub 上是开源的

使用 Blockbench 设计的《Minecraft》羊。

如需试用 Blockbench,请前往 web.blockbench.net 启动该应用。由于它是 PWA,因此您可以将其安装到桌面并在独立窗口中启动。如果您刚刚接触 3D 建模,可以先从 GitHub 代码搜索中找到的众多开源 .bbmodel 文件示例中的一个入手。例如,请尝试使用以下屏幕截图中显示的火车模型。

在 Blockbench 中修改火车模型。

EyeDropper API

除了众多其他功能之外,Blockbench 还提供绘制功能,因此,如果您想为火车添加标记,现在就可以了。请勿在实际操作中这样做。您可以看到,我在添加链接时使用了亮橙色。

火车模型上写着“Tom was here”的标签和一个和平手势。

这实际上是我通过 EyeDropper API 直接从 macOS Ventura 壁纸中提取的橙子。如以下屏幕截图所示,滴管(应用窗口左侧的橙色圆圈)可以直接从应用外部伸入我的桌面或我可能打开的任何其他应用。

显示的颜色选择器从 Blockbench 应用伸出,并从桌面背景图片中选择颜色。

由于 Blockbench 是开源的,因此您可以了解开发者如何实现该 API。相关代码位于 JannisX11/blockbench/blob/master/js/texturing/color.js 中。Blockbench 还可作为 Electron.js 应用使用。从评论中可以看出,它针对 Electron 中的问题(即颜色选择器无法在窗口之外选择颜色)提供了特殊情况处理。使用 Web API(您可以在代码段的突出显示部分看到)时,这不是问题。使用该 API 非常简单。实例化新的 EyeDropper 实例并调用其 open() 方法。此方法会解析为一个 sRGBHex 字符串,表示所选颜色,采用十六进制 sRGB 格式

new Action("pick_screen_color", {
  icon: "colorize",
  category: "color",
  condition: () => typeof EyeDropper == "function",
  click: async function () {
    if (Blockbench.platform == "win32") {
      // workaround for https://github.com/electron/electron/issues/27980
      ipcRenderer.send("request-color-picker", {
        sync: settings.sync_color.value,
      });
    } else if (typeof EyeDropper == "function") {
      let dropper = new EyeDropper();
      let { sRGBHex } = await dropper.open();
      ColorPanel.set(sRGBHex);
    }
  },
});

总结

颜色选择器是 Blockbench 等创意软件中一项小而重要的功能。通常情况下,所需颜色不在应用窗口中,而是在外部某个位置(甚至可能在其他屏幕上)找到的。如果颜色选择器在这种情况下不允许您选择颜色,那就几乎没什么用处了。EyeDropper API 正是为此类使用情形而创建的,自 2021 年 11 月实现以来,一直在 Blockbench 中发挥着重要作用。如果您使用的是 Blockbench,祝您选色愉快!