>  기사  >  웹 프론트엔드  >  HTML5 구성 요소 Canvas는 이미지 회색조를 구현합니다.

HTML5 구성 요소 Canvas는 이미지 회색조를 구현합니다.

PHP中文网
PHP中文网원래의
2016-05-16 15:49:321851검색

HTML5는 정말 마술적입니다. 프로그램은 Google 브라우저에서 테스트를 통과했습니다. 관심 있는 친구는 이 기사에 설명된 HTML5 구성 요소 Canvas를 사용하여 이미지의 회색조를 구현하는 구체적인 단계를 참조할 수 있습니다.

새 HTML 페이지 만들기

:

<canvas id="myCanvas" >Gray Filter</canvas>

가장 간단한 JavaScript 스크립트

<pre name="code" class="javascript">window.onload = function() { 
var canvas = document.getElementById("myCanvas"); 
<span style="white-space:pre"> </span>// TODO: do something here 
}

사이에 다음 코드를 추가합니다. 코드는 다음과 같습니다.

Canvas 객체에서 그리기 객체의 컨텍스트를 가져오는 코드는 다음과 같습니다.

var context = canvas.getContext("2d");
코드는 다음과 같습니다.

추가 이미지의 HTML 코드는 다음과 같습니다
<img id="imageSource" src="hanjiaren.jpg" alt="Canvas Source" />

코드는 다음과 같습니다.


자바스크립트 코드는 다음과 같습니다. html img 객체에서 이미지 객체를 얻는 방법은 다음과 같습니다.

var image = document.getElementById("imageSource");
코드는 다음과 같습니다.

획득한 이미지를 Canvas 객체에 그리는 코드는 다음과 같습니다.
context.drawImage(image, 0, 0);

코드는 다음과 같습니다.

캔버스 객체에서 이미지 픽셀 데이터를 얻는 코드는 다음과 같습니다. Canvas 객체는 다음과 같습니다.
var canvasData = context.getImageData(0, 0, canvas.width, canvas.height);

코드는 다음과 같습니다.


픽셀 값을 읽고 그레이스케일을 구현합니다. 정도 계산을 위한 코드는 다음과 같습니다.

for ( var x = 0; x < canvasData.width; x++) { 
for ( var y = 0; y < canvasData.height; y++) { 
// Index of the pixel in the array 
var idx = (x + y * canvasData.width) * 4; 
var r = canvasData.data[idx + 0]; 
var g = canvasData.data[idx + 1]; 
var b = canvasData.data[idx + 2]; 
// calculate gray scale value 
var gray = .299 * r + .587 * g + .114 * b; 
// assign gray scale value 
canvasData.data[idx + 0] = gray; // Red channel 
canvasData.data[idx + 1] = gray; // Green channel 
canvasData.data[idx + 2] = gray; // Blue channel 
canvasData.data[idx + 3] = 255; // Alpha channel 
// add black border 
if(x < 8 || y < 8 || x > (canvasData.width - 8) || y > (canvasData.height - 8)) 
{ 
canvasData.data[idx + 0] = 0; 
canvasData.data[idx + 1] = 0; 
canvasData.data[idx + 2] = 0; 
} 
} 
}

코드는 다음과 같습니다.



회색 계산식은 회색 = 0.299 × 빨간색 0.578 × 녹색 0.114 * 파란색
읽어오는 픽셀 값의 순서는 RGBA이며 각각 빨간색, 녹색, 파란색, 알파 채널을 나타냅니다.
처리된 데이터를 캔버스에 다시 로드해야 합니다. 코드는 다음과 같습니다. context.putImageData(canvasData, 0, 0);
HTML5 구성 요소 Canvas는 이미지 회색조를 구현합니다.프로그램의 최종 효과는 다음과 같습니다
:
전체 소스 코드는 다음과 같습니다
:

 
 
<script> 
window.onload = function() { 
var canvas = document.getElementById("myCanvas"); 
var image = document.getElementById(&quot;imageSource&quot;); 
// re-size the canvas deminsion 
canvas.width = image.width; 
canvas.height = image.height; 
// get 2D render object 
var context = canvas.getContext(&quot;2d&quot;); 
context.drawImage(image, 0, 0); 
var canvasData = context.getImageData(0, 0, canvas.width, canvas.height); 
alert(canvasData.width.toString()); 
alert(canvasData.height.toString()); 
// gray filter 
for ( var x = 0; x &lt; canvasData.width; x++) { 
for ( var y = 0; y &lt; canvasData.height; y++) { 
// Index of the pixel in the array 
var idx = (x + y * canvasData.width) * 4; 
var r = canvasData.data[idx + 0]; 
var g = canvasData.data[idx + 1]; 
var b = canvasData.data[idx + 2]; 
// calculate gray scale value 
var gray = .299 * r + .587 * g + .114 * b; 
// assign gray scale value 
canvasData.data[idx + 0] = gray; // Red channel 
canvasData.data[idx + 1] = gray; // Green channel 
canvasData.data[idx + 2] = gray; // Blue channel 
canvasData.data[idx + 3] = 255; // Alpha channel 
// add black border 
if(x &lt; 8 || y &lt; 8 || x &gt; (canvasData.width - 8) || y &gt; (canvasData.height - 8)) 
{ 
canvasData.data[idx + 0] = 0; 
canvasData.data[idx + 1] = 0; 
canvasData.data[idx + 2] = 0; 
} 
} 
} 
context.putImageData(canvasData, 0, 0); // at coords 0,0 
}; 
</script> 
 
 

Hello World!

<img id="imageSource" src="hanjiaren.jpg" alt="Canvas Source" /> <canvas id="myCanvas" >Gray Filter</canvas>
코드는 다음과 같습니다.





코드에 있는 파일은 원하는 대로 바꿀 수 있습니다. 보고 싶은 이미지 파일

HTML5는 정말 마법같은 존재입니다. 프로그램은 Google Chrome에서 테스트를 통과했습니다. 최종 조언은 위 코드를 로컬에서 실행하지 마세요. Google Chrome의 보안 검사는 자동으로 브라우저에서 도메인이 아닌 파일을 읽고 쓰는 것을 방지합니다. Tomcat이나 웹 컨테이너 서버에 게시하면 Google 브라우저에서 효과를 볼 수 있습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.