[英]change color of image to greyscale in html5
我有一個png圖像,我想將其轉換為灰度。 我設法將其轉換為灰度,但它也改變了圖像透明區域的顏色。 如何在不更改圖像透明區域的情況下更改顏色?
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = 'image.png';
ctx.drawImage(img, 0, 0);
var imageData = ctx.getImageData(0, 0, 420, 420);
var px = imageData.data;
var len = px.length;
for (var i = 0; i < len; i+=4) {
var redPx = px[i];
var greenPx = px[i+1];
var bluePx = px[i+2];
var alphaPx = px[i+3];
var greyScale = redPx * .3 + greenPx * .59 + bluePx * .11;
px[i] = greyScale;
px[i+1] = greyScale;
px[i+2] = greyScale;
px[i+3] = greyScale;
}
ctx.putImageData(imageData, 0, 0);
阿爾法是“不是一種顏色”。 您應該按原樣復制它,使透明部分保持透明。 只需刪除該行:
px[i+3] = greyScale;
我不完全確定這個目的,但由於問題也標記為“HTML5”,我認為可能需要與圖像處理庫不同的目的。 如果那不是某種圖像編輯器或HTML5游戲,你只需要將一些圖像轉換為灰度,例如懸停,你也可以使用CSS:
.grayscale {
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 10+, Firefox on Android */
filter: gray; /* IE6-9 */
-webkit-filter: grayscale(100%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */
}
如果這不合適,請發布有關您為什么需要這樣做的更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.