标签: offscreen-canvas

有没有办法将 SVG 字符串渲染到 Web Worker 中的 OffscreenCanvas?

我正在开发一个网页,对 SVG 字符串数据进行一些相当繁重的处理。因为这些字符串的大小可能达到 m/bs,所以我想将 SVG 的渲染(取决于浏览器)移至工作人员,以避免阻塞 UI。

我的问题是,worker 中无法访问 DOM 元素 - 有没有办法仅使用 SVG 字符串将 SVG 绘制到 OffscreenCanvas 的 2D 上下文?或者有没有办法将字符串转换为可以传递给工作人员的数据格式?

javascript svg worker offscreen-canvas

5
推荐指数
1
解决办法
925
查看次数

无法克隆 OffscreenCanvas,因为它已分离

昨天用 HTML canvas 回到了我的爱好,并尝试在单独的线程中进行渲染,只是在控制台中遇到以下错误:

未捕获的 DOMException:无法在“Worker”上执行“postMessage”:无法克隆 OffscreenCanvas,因为它已分离。在主要(http://localhost:8000/responsivetemplate/:47:14

[索引.html]

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="cache-control" content="must-revalidate" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
<meta charset="UTF-8" />
<title>OffscreenCanvas</title>
</head>
<body>
  <div id='wrapper'>
    <div id='content'>
      <canvas id="testcanvas" width="512" height="512"></canvas>
    </div>
  </div>
</body>
<script>
'use strict';

document.body.onload = function () {
  var canvas = document.getElementById('testcanvas');
  canvas.imageSmoothingEnabled = false;

  const …
Run Code Online (Sandbox Code Playgroud)

javascript html5-canvas offscreen-canvas

2
推荐指数
1
解决办法
1658
查看次数

在 JavaScript 的 Web Worker (worker.js) 中创建图像

我正在重写一个小的 javascript,以便能够将其放入worker.js 中,就像这里记录的那样:

Mozilla - Web_Workers_API

worker.js 应在 OffscreenCanvas 上显示图像,如下所示:

Mozilla - OfscreenCanvas 文档

初始脚本使用以下语句,显然不能在worker.js文件中使用,因为没有“文档”:

    var imgElement = document.createElement("img");
    imgElement.src = canvas.toDataURL("image/png");
Run Code Online (Sandbox Code Playgroud)

但我怎样才能代替

document.createElement("img");
Run Code Online (Sandbox Code Playgroud)

在worker.js中声明仍然可以使用第二个语句:

imgElement.src = canvas.toDataURL("image/png");
Run Code Online (Sandbox Code Playgroud)

如果有人有任何想法,我们将不胜感激。:)

javascript web-worker offscreen-canvas

2
推荐指数
1
解决办法
4445
查看次数

了解屏幕外画布以提高性能

大家好,我有一个非常复杂的画布编辑器,允许用户使用 Konvajs 和 Gifler 库选择视频背景、添加文本、gif 和 Lottie 动画。它已经走了很长一段路,但是我正在尝试加快我的画布应用程序的性能。我已经阅读了很多关于屏幕外画布的内容,但我不太明白。假设我有一个常规的 HTML 画布对象,我将如何创建一个离屏画布并将其吐回浏览器?理想情况下,我希望能够以 30 fps 的速度从画布中以无延迟的速度从数组中获取图像。我还担心,根据caniuse.com 的说法,屏幕外画布似乎尚未得到广泛支持。每当我尝试从我的画布创建屏幕外画布时,我总是得到:

Failed to execute 'transferControlToOffscreen' on 
'HTMLCanvasElement': Cannot transfer control from a canvas that has a rendering context.
Run Code Online (Sandbox Code Playgroud)

正如我所说,我只是想弄清楚如何平滑地渲染我的动画,但不知道如何去做。这里的任何帮助都会很棒。这是代码。

<template>
  <div>
    <button @click="render">Render</button>
    <h2>Backgrounds</h2>
    <template v-for="background in backgrounds">
      <img
        :src="background.poster"
        class="backgrounds"
        @click="changeBackground(background.video)"
      />
    </template>
    <h2>Images</h2>
    <template v-for="image in images">
      <img
        :src="image.source"
        @click="addImage(image)"
        class="images"
      />
    </template>
    <br />
    <button @click="addText">Add Text</button>
    <button v-if="selectedNode" @click="removeNode">
      Remove selected {{ selectedNode.type }}
    </button>
    <label>Font:</label>
    <select v-model="selectedFont">
      <option value="Arial">Arial</option>
      <option …
Run Code Online (Sandbox Code Playgroud)

javascript canvas konvajs offscreen-canvas

0
推荐指数
1
解决办法
3217
查看次数