【问题标题】:Transparent pixels using HTML5 canvas and getImageData?使用 HTML5 画布和 getImageData 的透明像素?
【发布时间】:2012-07-21 15:08:28
【问题描述】:

在我的应用程序中,我需要获取一些图像,对其进行处理,然后保存以备后用。所以我将它们绘制到一个临时画布上,然后使用getImageData 函数。但是在输出中失去了透明度......

这是我的代码:

var tempCanvas = document.createElement('canvas');
var tempContext = tempCanvas.getContext('2d');

tempContext.drawImage(image, 0, 0);
var imageData = tempContext.getImageData(0, 0, image.width, image.height);

我的image 有一些透明像素,但之后imageData 中没有透明像素我该如何解决这个问题?

有什么方法可以将 Html Image 转换为 ImageData,以便我可以处理它然后绘制到画布上?

【问题讨论】:

  • 你如何测试你的 alpha 透明度是否存在? imageData 包含每个像素的 alpha 值。
  • 我正在尝试再次将图像绘制到画布(使用 putImageData)并且透明度丢失了。

标签: javascript image html canvas


【解决方案1】:

你的 imageData 应该包含 alpha 通道。

但是,putImageData 将替换上下文中的像素值。 它不会将它与上下文中像素的先前值合并,它将替换它。所以,你应该看到的是画布后面的像素(在大多数情况下,你的 html 页面的 body 标签的像素颜色)。

你必须做什么:

  • 使用临时画布获取图像数据是个好方法
  • 根据需要修改 imageData
  • 不要尝试将此 imageData 放回带有 putImageData 的 conetext 中,它不会像您希望的那样运行
  • 但是创建一个新的 Image 对象并将 imageData 作为源(是的,它可以工作:))
  • 使用drawImage画回图像

代码示例:

var tempCanvas = document.createElement('canvas');
var tempContext = tempCanvas.getContext('2d');

tempContext.drawImage(image, 0, 0);
var imageData = tempContext.getImageData(0, 0, image.width, image.height);

//modify here the imageData as you need

var img = new Image();
img.src = imageData;
context.drawImage(img, 0, 0); //the true context of the canvas

它应该可以工作。

【讨论】:

  • 是的,我现在知道了。我已经解决了这个问题。但无论如何感谢您的正确答案))
  • 你可以使用img.src = tempCanvas.toDataURL('image/png');
  • 我也陷入了困境。谢谢你的提示。我制作了一个代码笔来说明这个问题,并展示了如何通过使用临时画布在使用 drawImage 而不是 putImage codepen.io/jpdevries/pen/LGmVxE?editors=0010 时实现“分层”
猜你喜欢
  • 2011-02-24
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 2012-10-13
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
相关资源
最近更新 更多