html5 canvas


javascript(=코딩)로
웹페이지에 그림을 그린다

이미지파일 써... 그냥..
코딩으로 그림을 왜 그려..
생각보다 다양한 곳에서 쓰이고 있고
다양한 일들이 가능해집니다.
좀만 해도 주변사람들에게 코딩 엄청잘하는 것처럼...

촋 로 가는길도 basic 부터~
일단 <canvas>부터 만들어 봅시다~

<canvas id="myCanvas"></canvas>html에는 이것만!
이 다음 모두 javascript에서 이루어집니다.
단! 사이즈 지정이 필요한 경우는 width, height 속성추가


IE8 이하는 지원하지 않습니다.
<canvas id="myCanvas">IE쓰지마!!!!!!!!!!</canvas>그럴땐 이렇게 대체 문자열을 넣어주면..
그냥 삐뚤어지고 싶은 마음에 사진을..

1. 캔버스에 사각형 그리기

var canvas = document.getElementById('myCanvas');var context = canvas.getContext("2d");canvas의 rendering context를 가져옵니다. 2d로
Why 2d? I like 3d!!

항상 왜 2d야? 3d는 불가능해? 3d로 된 튜토리얼 같은거 없어?
아직 브라우저상에 구현되지 않음
안됐으면.. 좋켓어


는 꿈
응 있어 WebGL

빨리 사각형 만들자고요~
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = 원하는 색;
ctx.fillRect(x, y, width, height);https://codepen.io/2xel/pen/qQropL


만들어볼까요?
자유한국당
더민주
국민의당
정의당

API 문서를 찾아보니!
캔버스의 처음 너비는 300 x150px 입니다.
곰방눈치재죠잉~
컴잘알~ CSS도 쉽지~ 안해서 못하는거지 하면 잘해~
귀찮아서 안하는 거야~
<canvas id="canvas" style="width: 300px; height: 300px;"></canvas>
의석수가 점점더 차이납니다.

CSS 크기 지정이 초기 캔버스의 비율을 고려하지 않으면 왜곡되어 나타납니다 .
<canvas id="canvas" width="150" height="150"></canvas>
<canvas id="canvas2" style="width: 150px; height: 150px;"></canvas>
<style>
canvas {
border: 1px solid black;
}
</style>
<canvas id="canvas" width="150" height="150"></canvas>
<canvas id="canvas2" style="width: 150px; height: 150px;"></canvas>
var canvas = document.getElementById("canvas")
var ctx = canvas.getContext("2d")
ctx.fillStyle = "red"
ctx.fillRect(0, 0, 100, 100)
var canvas2 = document.getElementById("canvas2")
var ctx2 = canvas2.getContext("2d")
ctx2.fillStyle = "blue"
ctx2.fillRect(0, 0, 100, 100)
1. 캔버스에 사각형 그리기
2. 이미지에 필터 적용해보기

context.drawImage(image, x, y);context.drawImage(image, x, y, width, height);이미지를 그려라
이미지 크기를 늘리거나 줄여서 그려라
https://codepen.io/2xel/pen/eQRXmp?editors=1010
var imageData =
context.getImageData(0, 0, canvas.width, canvas.height);
// ImageData {data: Uint8ClampedArray(1000000), width: 500, height: 500}이미지의 정보를 가지고옴
var pixelData = imageData.data;이미지 정보의 픽셀 정보
이미지의 픽셀 갯수
var numPixels = imageData.width * imageData.height;| R | G | B | A | R | G | B | A | R | ...... |
|---|
첫번째 픽셀의 RGBA
두번째 픽셀의 RGBA
이미지의 RGBA값을 가지고 있는1차원 배열
모든 픽셀의 정보를 수정하기 위해서..
var pixelData = imageData.data;
for (var i = 0; i < numPixels; i++) {
var r = pixelData[i * 4];
var g = pixelData[i * 4 + 1];
var b = pixelData[i * 4 + 2];
}for (var i = 0; i < numPixels; i+=4) {
var r = pixelData[i];
var g = pixelData[i + 1];
var b = pixelData[i + 2];
}context.putImageData(imageData, 0, 0);
// 그려라https://codepen.io/2xel/pen/VVWoGw?editors=0010
다양한 필터 적용 실습
3. 이미지 사이즈 조정


별거는 없고 File API를 이용해 파일을 읽은 후 canvas로 리사이징
var file = document.getElementById("file");
file.onchange = function() {
var fileList = file.files;
var reader = new FileReader();
// 파일을 읽는다.
reader.readAsDataURL(fileList[0]);
// 로드가 완료되면
reader.onload = function() {
var tempImg = new Image();
tempImg.src = reader.result;
// 이미지 로드가 완료되면
tempImg.addEventListener("load", function() {
var thumbnail = document.getElementById("thumbnail");
var thumbnailContext = thumbnail.getContext("2d");
// 리사이징
thumbnailContext.drawImage(tempImg, 0, 0, 100, 100);
});
};
};canvas1 발표
By leejaemin
canvas1 발표
- 198