首页
学习
活动
专区
工具
TVP
发布

使用 Go在WASM 中进行图像处理的实验

首发于:https://studygolang.com/articles/13727

的主分支最近完成了一个 的工作原型实现。作为 的爱好者,我自然要把玩一下。

这篇文章,我要记下周末我用 做的处理图像实验的想法。这个演示只是从浏览器中获取图像输入,然后应用各种图像变换,如亮度,对比度,色调,饱和度等,最后将其转储回浏览器。这测试了两件事 - 简单的CPU绑定执行,这是图像转换应该做的事情,以及在 和 之间传递数据。

回调

应该明确如何在 和 之间进行调用,不是我们在 中的常用的方式;它是暴露一个函数然后从 调用它。在 中, 的互操作是通过回调完成的。在您的 代码中,设置可以从 调用的回调。这些是您希望在 代码中执行的主要事件处理程序。

它看起像这样 -

这有个模式-随着你的应用增长,它成为一个 事件回调处理程序列表。我把它看作 应用的 处理器。

为了规范,我把所有回调作为我的主结构的方法并在一个地方关联它们。类似于你把 URL 处理器声明在不同的文件里并在一个地方设置所有路由一样。

然后在一个单独文件里编写您的回调 -

执行

我吐槽的是图像数据从 传给浏览器的方式。在图像上传时,我把 属性设置为整个图像的编码格式,该值传到 代码中对其解码为二进制,应用转换然后再编回 并设置目标图像的 属性。

这使得 非常沉重,需要从 传递一个巨大的字符串到 。 如果 中 有所支持可能会改善。我也在研究在画布中直接设置像素,看看有没有任何好处。即使为了消减这个 转换也应该花些时间。(请不吝赐教其他方法)

性能

对于一个 的 图像,应用转换所需时间约为毫秒。这个时间随着图像大小而增加。这是使用 测试的。(FF一直报错,我也没时间调查)

性能快照显示

堆相当大。堆快照大约1GB

整理想法

完整库在这 - github.com/agnivade/shimmer。随意使用。提醒一下这是我一天写的,所有显然会有改进的地方。我会进一步研究。

附:- 请注意,图像变换不会应用于另一个图像之上。就是说如果您更改亮度然后更改色调,则生成的图像将仅改变原始图像的色调。这是现在的待办项目。

via: http://agniva.me/wasm/2018/06/18/shimmer-wasm.html

作者:AGNIVA

译者:themoonbear

校对:polaris1119

本文由 GCTT 原创编译,Go语言中文网 荣誉推出

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190204B0J2GL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券