Есть ли способ остановить премультипликацию альфа-канала для данных холста или обходной путь?
Я хочу создать образ (в данном случае некоторые случайные значения rgba) и сохранить холст в качестве изображения.
На втором этапе я хочу сравнить исходное изображение с сгенерированным изображением с помощью imageData, однако это не будет работать из-за предварительного умножения альфа-канала моих пикселей rgba в сгенерированном изображении.
function drawImage(ctx) {
var img = ctx.createImageData(canvas.width,canvas.height);
for (var i=img.data.length;i-=4;) {
img.data[i] = Math.floor(Math.random() * 255);
img.data[i+1] = Math.floor(Math.random() * 255);
img.data[i+2] = Math.floor(Math.random() * 255);
img.data[i+3] = Math.floor(Math.random() * 255);
}
ctx.putImageData(img, 0, 0);
// our image data we just set
console.log(img.data);
// the image data we just placed onto the canvas
console.log(ctx.getImageData(0,0,canvas.width, canvas.height).data);
}
В консоли вы найдете два выхода console.log. Первый перед премультипликацией, второй - после умножения. Эти два выхода отличаются друг от друга, некоторые значения отключены на 3 или более. Это происходит только при наличии частичной прозрачности (альфа устанавливается на что угодно, кроме 255).
Есть ли способ получить тот же результат? Любые идеи об этой проблеме? Любые идеи, как создать что-то вроде обходного пути для этой проблемы?
Заранее благодарю вас!