캔버스의 Vanilla JavaScript 이미지
8049 단어 htmlcanvascssjavascript
getImageData
함수를 사용하여 이미지를 읽고 픽셀 데이터를 복사하는 imageData
객체를 반환합니다.각 픽셀에 대해
rgba
값을 얻습니다.오늘 우리는 이미지에서 이러한 값을 가져와 반전시키는 방법을 탐구할 것입니다.
최종 결과는 이 Codepen입니다.
다음 링크에서 캔버스 수정에 대한 다른 기사를 찾을 수 있습니다.
이미지를 추가하는 캔버스
새 이미지를 렌더링할 이미지와 캔버스가 있도록 먼저
HTML
구조를 설정해 보겠습니다.<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1600016358126/bMK5IddO3.jpeg" id="eeveelutions" />
<canvas id="canvas" width="200" height="200">
이제 200x200 크기의 이미지와 이번 연습을 위해 동일하게 만든 캔버스가 있습니다.
다음으로
JavaScript
에서 이미지와 캔버스를 정의해야 합니다.const img = document.getElementById('eeveelutions');
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
이제 캔버스에 있는 그대로 이미지를 렌더링할 수 있습니다.
Note: We have to wait for the image to load, else we will see a white image
img.onload = function () {
ctx.drawImage(img, 0, 0);
};
하지만 이 점은 그다지 유용하지 않으므로
imageData
를 얻습니다.const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
Note: For Codepen I have to add
img.crossOrigin="anonymous";
for CORS issues.
그런 다음 다음과 같은 imageData 객체를 얻습니다.
앞에서 언급한 바와 같이 이들은
rgba
값이므로 4개의 레코드마다 다음을 포함하는 하나의 픽셀 값입니다.따라서 각 픽셀 값을 반전하려면 세 가지 색상 각각에 대해 다음 계산을 수행해야 합니다(알파는 255를 유지함).
코드에서는 다음과 같이 표시됩니다.
for (i = 0; i < imgData.data.length; i += 4) {
imgData.data[i] = 255 - imgData.data[i];
imgData.data[i + 1] = 255 - imgData.data[i + 1];
imgData.data[i + 2] = 255 - imgData.data[i + 2];
imgData.data[i + 3] = 255;
}
마지막 단계는 이 수정된 데이터를 캔버스에 다시 넣는 것입니다.
ctx.putImageData(imgData, 0, 0);
이제 캔버스에 이미지를 배치하는 방법과 이미지의 픽셀 데이터를 수정하는 방법까지 배웠습니다! 🔥
Image credit Zerochan
브라우저 지원
imageData API와 캔버스는 매우 훌륭하게 지원됩니다!
읽어주셔서 감사합니다. 연결합시다!
제 블로그를 읽어주셔서 감사합니다. 내 이메일 뉴스레터를 구독하고 Facebook에 연결하거나
Reference
이 문제에 관하여(캔버스의 Vanilla JavaScript 이미지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dailydevtips1/vanilla-javascript-images-in-canvas-1pon텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)