【发布时间】:2016-05-11 22:57:30
【问题描述】:
基本上,当一个按钮被点击时,它会告诉移动设备去摄像头。一旦相机拍照,它就会给我图像数据(它是否称为数据 URL?)。这是我处理它的代码:
var imagesrc = "data:image/jpeg;base64," + imageData;
var myimage = new Image(500, 500);
myimage.src = imagesrc; <---- to populate the object with the colored image
myimage.src = grayscale(myimage); <---- here I set it to the grayscale image
我想调用一个名为grayscale() 的方法,让它返回已经变成灰度的图像。我试过这个:
function grayscale(image){
var canvasContext = canvas.getContext('2d');
var imgW = image.width;
var imgH = image.height;
canvas.width = imgW;
canvas.height = imgH;
canvasContext.drawImage(image, 0, 0);
var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH);
for(>var y = 0; y < imgPixels.height; y++){
for(>var x = 0; x < imgPixels.width; x++){
var i = (y * 4) * imgPixels.width + x * 4;
var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
imgPixels.data[i] = avg;
imgPixels.data[i + 1] = avg;
imgPixels.data[i + 2] = avg;
}
}
canvasContext.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
dataurl = canvas.toDataURL();
var newimg = "data:image/jpeg;base64," + dataurl;
return newimg;
}
但由于某种原因它不起作用。它只是不显示灰度图像。我在网上找到了 for 循环代码并对其进行了调整。
【问题讨论】:
-
如何调整它?它最初是做什么的(并且确实有效)?
-
究竟是什么“不起作用”?你做了一些调试吗?意外行为在哪里?
-
呃,
toDataURL已经返回了一个完整的数据 URL,你不需要添加前缀(而且它不会是 jpeg)
标签: javascript image data-url