Я использую HTML canvas
, чтобы получить изображение в оттенках серого, и я не хочу просто усреднять его. Поэтому я использую эту функциюКак установить альфа-канал в холсте при гранулировании
var imageData = ctx.getImageData(0,0,canvas.width, canvas.height);
var data= imageData.data
for (var i = 0; i < data.length; i += 4) {
var grayscale = (data[i]*0.2126 + data[i +1]*0.7152 + data[i +2])*0.0722;
data[i] = grayscale; // red
data[i + 1] = grayscale; // green
data[i + 2] = grayscale; // blue
}
ctx.putImageData(imageData, 0, 0);
}
Проблема, однако, если изображение имеет белый фон, оно будет превращено в черный. Так что попробовал data[i + 3] = 255;
для альфа-канала, но это превратило весь холст в черный.
Что я делаю неправильно?
FML, я ноот! Благодаря! Поэтому мне было интересно, есть ли способ отделить только один канал в холсте. Подобно IMagick 'convert myfile.jpg -channel B -separate myfileR.jpg' – Tom
Ну, используйте тот же код, что и выше, просто установите каналы, которые вам не нужны. –
ОК, что работает, но теперь, если я в оттенках серого он снова превращает белое пространство в черный – Tom