在JavaScript中访问图像的像素以进行图像处理的最佳方法?

我正在尝试使用javascript对图像执行简单的操作。 为了获得图像的像素,我在画布上绘制图像,然后从画布中获取ImageData。 但对于大型图像,在画布上绘制它们需要很长时间。

有没有其他方式获得图像像素而不使用canvas元素?


我不认为你可以在JavaScript中使用硬件加速进行图像处理,所以无论是使用canvas还是其他技术,在JavaScript环境中都不会获得太多边缘效益。

如果你希望你的代码被硬件加速,你的代码必须被编译成在GPU中运行并可以访问图形内存的东西。 Flash和Silverlight的方法是引入像AGAL和HLSL这样的着色语言。 也许JavaScript将来会有这样的事情。

所以我的建议是做图像处理:

  • 服务器端技术
  • 带有阴影语言的Flash和Silverlight

  • 我对JavaScript没有多少经验,但Max Novakovic(@betamax)写了一个很好的小型jQuery插件,名为$ .getImageData ,这可能会有所帮助。

    您可以在骚扰博客和插件页面上阅读有关$ .getImageData的更多信息

    关闭像素化示例

    你应该能够通过像context.getImageData(x, y, width, height).data这样的东西来访问像素。

    另外,你提到了硬件加速,这应该在Firefox4和Chrome中可用。 Shadertoy在浏览器中使用GLSL着色器:

    ShaderToy预览


    我不确定,但是可能会将图像数据写入字符串,然后操作字符串,然后在显示结果图像之前将其翻译成图像?

    这不需要绘制到画布,只需将图像数据加载为字符串而不是图像。 但是,它会涉及一些复杂的操作,并且可能很难正确进行字符串操作,以确保图像数据正确转换,并且还可以操作像素。

    这也意味着字符串对于较大的图像可能会很长,所以这可能需要比画布更多的内存,并且可能需要将其分割成多个字符串。 作为交换,它可能比绘制到画布更快,尤其是对于多个字符串,如果您只需要操作图像的一部分。

    我对图像操作没有经验,但理论上没有理由将文件数据写入字符串。 这又是一个非常长的字符串,因为它可能会对RAM造成影响,因为字符串可能占用比图像文件本身更多的RAM。 但加载速度会更快,因为它不需要像绘制画布那样处理数据。

    链接地址: http://www.djcxy.com/p/7813.html

    上一篇: Best way to access pixels of an image in JavaScript to do Image Processing?

    下一篇: to log execution order of a C# application