Как я могу преобразовать холст в изображение с прозрачностью?

#javascript #canvas #html5-canvas

Вопрос:

В настоящее время я пытаюсь сделать изображение метеорологического радара с черным фоном и сделать фон прозрачным. Для этого я использую холст. Когда я показываю изображение, фон, который должен быть прозрачным, теперь выглядит как рисунок в красно-черную шахматную доску. Смотрите здесь:

метеорологический радар с красно-черным шахматным фоном

Используемый код находится здесь:

 function removeBlack(img) {  // Create canvas and draw image  let tmpCanvas = document.createElement('canvas');  tmpCanvas.width = img.width;  tmpCanvas.height = img.height;  let tmpCtx = tmpCanvas.getContext('2d');  tmpCtx.drawImage(img, 0, 0, tmpCanvas.width, tmpCanvas.height);   // Get image data and add opacity to black pixels  let imgData = tmpCtx.getImageData(0, 0, tmpCanvas.width, tmpCanvas.height);  let data = imgData.data;  for (var i = 0; i lt; data.length; i  = 4) {  let r = data[i],  g = data[i 1],  b = data[i 2];    if (r === 0 amp;amp; g === 0 amp;amp; b === 0) data[i   4] = 255;  }   tmpCtx.putImageData(imgData, 0, 0);  imgData = tmpCanvas.toDataURL("image/png");    let image = document.createElement('img');  image.src = imgData;  img.remove();  tmpCanvas.remove();  return image; }  

Ответ №1:

В вашем цикле должны быть данные[i 3] = 255

данные[i 4] войдут в следующее 32-разрядное цветовое слово и установят максимальный красный байт

Ps: вам также нужно будет проверить, должно ли значение альфа быть 0 или 255 — 255 может быть полностью непрозрачным, а не прозрачным

Комментарии:

1. Да, в этом-то и была проблема. Спасибо за ответ.