Простым решением было бы использовать другой холст за первым.
Обычно пиксели холста инициализируются прозрачным черным цветом и поэтому отлично видны.
Если ваш первый холст создаются непрозрачным вместо только другого варианта я могу думать, чтобы это
- создать временный холст того же размера
- нарисовать свой образ в этом временном полотне
- получить Объект ImageData как временного холста, так и исходного холста
- копия с временного холста на исходный холст, только если исходный холст не установлен на цвет фона
В коде:
var tmpcanvas = document.createElement("canvas");
tmpcanvas.width = canvas.width;
tmpcanvas.height = canvas.height;
var temp_ctx = tmpcanvas.getContext("2d");
// ... draw your image into temporary context ...
var temp_idata = temp_ctx.getImageData(0, 0, canvas.width, canvas.height);
var temp_data = temp_idata.data;
// Access the original canvas pixels
var ctx = canvas.getContext("2d");
var idata = ctx.getImageData(0, 0, canvas.width, canvas.height);
var data = idata.data;
// Find the background color (here I'll use first top-left pixel)
var br_r = data[0], bg_g = data[1], bg_b = data[2];
// Replace all background pixels with pixels from temp image
for (var i=0,n=canvas.width*canvas.height*4; i<n; i+=4) {
if (data[i] == bg_r && data[i+1] == bg_g && data[i+2] == bg_b) {
data[i] = tmp_data[i];
data[i+1] = tmp_data[i+1];
data[i+2] = tmp_data[i+2];
data[i+3] = tmp_data[i+3];
}
}
// Update the canvas
ctx.putImageData(idata, 0, 0);
этот подход, однако, будет иметь более низкое качество, если исходный холст графика был составлен со сглаживанием или если пиксели фонового цвета также используется в изображении (например, объект на белом фоне #FFF, где также выделяются объекты #FFF). Другая проблема заключается в том, что цвет фона не является абсолютно однородным значением RGB (это произойдет, если изображение было сжато с помощью алгоритма с потерями, например jpeg).
Все эти проблемы могут быть смягчены с помощью более сложных алгоритмов, таких как соответствие диапазона, морфологические корректировки и преобразования цвета в альфа (в основном это те же механизмы, что и для цветной клавиатуры).
единственная цель водяного знака должен быть на вершине чего-то не за – slash197
@ slash197 Игнорируйте тот факт, что это водяной знак - это возможность вставить его за все другое содержимое на холсте? – think123
Нет, это не так, у холста нет такой памяти. –