javascript - 如何使用给定本地 url 的 OffscreenCanvas 调整 webworker 中的图像大小并将调整大小的数据返回到主线程?
问题描述
我想从主线程卸载图像加载和调整大小。在阅读了这个之后,似乎我的选择是fetch
OffscreenCanvas
和的组合WebWorker
。
到目前为止,我在我的 webworker 代码中进入了以下阶段:
我传递
imageUrl
给网络工作者,然后我获取它,这使我可以访问它的 blob 格式的图像数据然后我创建了一个屏幕外画布以准备调整图像大小(画布似乎是我在网上找到的最常用的方法)
示例代码如下所示
const response = await fetch(imageUrl);
const blob = await response.blob();
const canvas = new OffscreenCanvas();
我被困在这个阶段。到目前为止,我发现的所有示例都Image()
用于从 url 创建图像并访问其宽度/高度值,以及将数据加载到画布上。
在我的情况下,我只能访问 blob 并且由于我们在 webworker 我无法创建new Image()
,因此我不确定如何进一步进行?
理想情况下,接下来我们将图像 blob 加载到画布上,将其大小调整为 50%,然后将图像的 base64 或 BlobUrl 返回到主线程。
解决方案
由于您没有研究所有浏览器的支持,我猜您可能会考虑使用createImageBitmap()
方法,该方法包含其他Blob
数据并返回ImageBitmap
。它可用于读取获取图像的高度和宽度,并将其绘制在屏幕外的画布上。
更多细节在这里:https ://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/createImageBitmap
推荐阅读
- java - jOOQ - 在“when”查询中从“then”返回字段元组
- android - Android 在构建动态功能时要求将“hasCode”属性设置为 false
- python - 用列表中的项目定义字典键的 Pythonic 方法
- javascript - 如何在表格中定位此脚本?
- asp.net-core - 如何将 IViewLocationExtender 与 Razor 页面一起使用来呈现设备特定页面
- exception - 为什么在 corutineAScope 块中有 try/catch 仍然会因捕获的异常而崩溃
- slack - 如何一次从多个交互块中获取数据?
- android - Android Jsoup 查找特定元素
- ios - MapBox 在 CGRect 中获取 visibleCoordinateBounds
- angular - 如何从 Angular 中的另一个组件设置 FormGroup 值