图像预览和网络工作者
Image previews and web workers
是否可以在web工作程序中使用filereader api加载图像,即预览/缩略图,从而防止主ui线程被阻塞。
类似于此,但将cpu密集型部分(主要是读取文件内容和缩放图像)封装在web工作程序中
工作人员无法访问页面的DOM级别,因此您无法创建Image对象或画布(用于缩放部分),因此答案是否定的,因为您想要操作图像。
不过,可以通过ajax或FileReaderSync
在网络工作者上加载图像文件,将其转换为base64数据url字符串并将其发送回主脚本,但无法通过操作图像来创建缩略图。(除非你知道png/jpg.bmp格式的文件规范,并且想对直接在二进制字符串上工作的缩放函数进行硬编码,否则看起来不太好吗?)
主线程被称为UI线程,因为与UI相关的一切都必须直接发生在那里。您不能在WebWorker中操作DOM,但可以在WebWorkers中操作图像文件的二进制文件。在图像操作之后,您必须将数据传输到主线程,并让它将其附加到DOM。然后浏览器将在主线程中渲染此图像。
如果可以的话,这是可能的。
- 从工作者向服务器发出ajax请求,将responseType设置为arraybuffer,将responseText设置为response
- 在服务器上,假设PHP将请求的图像加载到GD表示中(createImageFromJpeg)
- 获取每个像素信息(imagecolorat)
- 提取RGBA颜色,(打包)每个颜色并将它们添加到字符串中
- 把那个字符串发回给工人
- 根据响应创建一个新的Uint8Array
- 做一些操作
- 将所有权提交给主脚本
- 将数据添加到画布中
阅读:发送Arraybuffer,可传输对象
把整个剧本写下来会超出范围。
相关文章:
- 网络工作者突然终止工作
- 电子框架是否允许网络工作者进行多线程处理
- 我如何使用HTML5网络工作者与谷歌关闭工具
- 正确的使用方式是什么.js与网络工作者
- 如何在网络工作者中访问网络套接字
- 如何在没有网络工作者的情况下运行多个脚本
- 两个javascript网络工作者连续打印输出-为什么不同时打印呢
- 我可以在网络工作者中加载AMD模块吗
- 如何从节点-网络工作者-线程向控制台发送错误
- 使用网络工作者和画布合并 png 图像
- 网络工作者支持
- Webpack 网络工作者加载器不工作
- 网络工作者如何在单核机器中工作
- 如何在网络工作者中声明 angularjs
- 究竟什么是网络工作者以及何时使用它们
- 具有多个参数的 HTML 5 网络工作者
- 网络工作者发布消息处理顺序
- 识别网络工作者环境
- 我可以在网络工作者上访问文档cookie吗
- 如何处理网站上的大规模计算?网络工作者或CGI