javascript 将从API绘制到HTML画布的数据加载到p5js

eoxn13cs  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(81)

bounty已结束.回答此问题可获得+200声望奖励。赏金宽限期17小时后结束。erik希望引起更多的注意这个问题。
编者注(截稿后将删除):
不允许聊天GPT回答:请阅读Generative AI (e.g., ChatGPT) is banned

我有一个项目,其中有两个画布,需要结合起来,一个内p5和一个外。第一个是p5 js草图(通过createCanvas创建,本质上是一个绘图应用程序),第二个是通过对Map服务的API调用自动创建的(我们的用例基本上是注解Map)。
作为参考,API查找具有特定ID的div,然后附加新的canvas元素。
我们想做的是将两个图像拼接成一个可保存的图像供用户使用。底层将来自MapAPI画布,顶层将是用户绘制的注解。
我们面临的问题是,自动创建的画布是作为webgl上下文进入的,所以我们似乎无法使用任何基本方法来获取2d上下文中的画布数据。
有没有一种简单的方法可以做到这一点,我忽略了,或者我需要开始弄清楚如何解析出webgl数据到图形对象的pixels数组?
下面的图片是我们到目前为止所拥有的-绘图工作,Map加载良好,现在我们只需要将它们保存为用户的完整图像。
x1c 0d1x的数据

j5fpnvbx

j5fpnvbx1#

将来自不同画布的内容与不同的上下文结合起来确实有点棘手,特别是当其中一个画布使用WebGL上下文时。由于p5.js对直接使用WebGL上下文的支持有限,与使用2D上下文的方式相同,因此您需要找到一种替代方法。
html2canvas库是一个东西,它允许您捕获HTML元素的内容(包括画布)并将其转换为图像。通过这种方式,您可以捕获两个画布(p5.js和map API画布),将它们组合成单个图像,并将其作为下载链接提供给用户。
1.将html2canvas库添加到项目中。
<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>
(Make确保p5.js画布和map API画布都已加载并在页面上可见。)
1.在按钮的事件处理函数中,您可以使用html2canvas库捕获两个画布,然后将它们合并为一个图像。完成后,您可以提供组合图像作为下载链接或执行任何其他您想要的操作。
事件处理函数的示例:

// Event handler function for the button to save the combined image
function saveCombinedImage() {
  // Get references to the p5.js canvas and the map API canvas
  const p5Canvas = document.getElementById('your-p5-canvas-id');
  const mapApiCanvas = document.getElementById('your-map-api-canvas-id');

  // Use html2canvas to capture both canvases
  html2canvas(p5Canvas).then((p5CanvasCapture) => {
    html2canvas(mapApiCanvas).then((mapApiCanvasCapture) => {
      // Create a new canvas to combine the captured canvases
      const combinedCanvas = document.createElement('canvas');
      combinedCanvas.width = p5CanvasCapture.width;
      combinedCanvas.height = p5CanvasCapture.height;
      const ctx = combinedCanvas.getContext('2d');

      // Draw the map API canvas as the bottom layer
      ctx.drawImage(mapApiCanvasCapture, 0, 0);

      // Draw the p5.js canvas as the top layer
      ctx.drawImage(p5CanvasCapture, 0, 0);

      // Now the `combinedCanvas` contains the merged image of both canvases
      // You can offer this as a download link or use it as needed.

      // For example, create a link for the user to download the image
      const downloadLink = document.createElement('a');
      downloadLink.href = combinedCanvas.toDataURL();
      downloadLink.download = 'combined_image.png';
      downloadLink.click();
    });
  });
}

字符串
在本例中,将your-p5-canvas-idyour-map-api-canvas-id分别替换为p5.js canvas和map API canvas的实际ID。

相关问题