HTML5 API - Canvas - 2




16. CanvasRenderingContext2D.quadraticCurveTo(cpx, cpy, x, y): 


한 개의 조절점(중심점)(cpx, cpy)을 마지막으로 지정된 현재 좌표와 조절점 그리고 지정된점(x, y)에 인접한 원호를 그린다.


cpx: 호를 그리는 조절점 가로 좌표

cpy: 호를 그리는 조절점 세로 좌표

x: 호가 인접하는 두번째 직선의 종료 가로 좌표

y: 호가 인접하는 두번째 직선의 종료 세로 좌표




  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function quadraticCurveTo() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d');
  13.  
  14.        // rect() 메서드는 이전에 배운 fillRect() 메서드와는 달리 경로가 지정된 도형의 외각선을 그리는 stroke() 메소드를 사용해야한다.
  15.        ctx.beginPath();
  16.  
  17.        ctx.beginPath();
  18.        ctx.moveTo(10, 90);
  19.        ctx.lineTo(100, 10);
  20.        ctx.lineTo(190, 90);
  21.        ctx.strokeStyle = "black";
  22.  
  23.        ctx.closePath();
  24.  
  25.        ctx.stroke();
  26.  
  27.        ctx.beginPath();
  28.        ctx.moveTo(10, 90);
  29.  
  30.        ctx.strokeStyle = 'red';
  31.        ctx.quadraticCurveTo(100, 10, 190, 90);
  32.        
  33.        ctx.stroke();
  34.  
  35.        
  36.    }
  37.  
  38.  
  39.  
  40.    function bind(elem, type, handler, capture) {
  41.        type = typeof type === 'string' && type || '';
  42.        handler = handler || function () { ; };
  43.        capture = capture || false;
  44.  
  45.        if (elem.addEventListener) {
  46.            elem.addEventListener(type, handler, capture);
  47.        }
  48.        else if (elem.attachEvent) {
  49.            elem.attachEvent('on' + type, handler);
  50.        }
  51.  
  52.        return elem;
  53.    };
  54.  
  55.  
  56.    bind(window, 'load', function () {
  57.        quadraticCurveTo();
  58.    });
  59.  
  60.  
  61. //]]>
  62. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  63. </body>
  64. </html>



실행 결과:









17. CanvasRenderingContext2D.bezierCurveTo(cplx, cply, cp2x, cp2y, x, y):


한 개의 조절점(중심점)(cpx, cpy)를 마지막으로 지정된 현재 좌표와 조절점 그리고 지정된점(x, y)에 인접한 원호를 그린다.


cp1x: 베지어 첫번째 조절점 가로 좌표

cp2y: 베지어 첫번째 조절점 세로 좌표

cp1x: 베지어 두번째 조절점 가로 좌표

cp2y: 베지어 두번째 조절점 세로 좌표

x: 베지어 곡선을 그리기 위한 가상 직선 종료 점 가로 좌표

y: 베지어 곡선을 그리기 위한 가상 직선 종료 점 세로 좌표




  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function bezierCurveTo() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d');
  13.  
  14.        ctx.beginPath();
  15.        ctx.moveTo(10, 90);
  16.        ctx.lineTo(40, 10);
  17.        ctx.strokeStyle = "black";
  18.        
  19.        ctx.stroke();
  20.  
  21.        ctx.beginPath();
  22.        ctx.moveTo(150, 10);
  23.        ctx.lineTo(190, 90);
  24.        ctx.strokeStyle = "black";
  25.        
  26.        ctx.stroke();
  27.  
  28.        ctx.beginPath();
  29.        ctx.moveTo(10, 90);
  30.        ctx.bezierCurveTo(40, 10, 150, 10, 190, 90);
  31.        ctx.strokeStyle = "red";
  32.        
  33.        ctx.stroke();
  34.  
  35.        
  36.    }
  37.  
  38.  
  39.  
  40.    function bind(elem, type, handler, capture) {
  41.        type = typeof type === 'string' && type || '';
  42.        handler = handler || function () { ; };
  43.        capture = capture || false;
  44.  
  45.        if (elem.addEventListener) {
  46.            elem.addEventListener(type, handler, capture);
  47.        }
  48.        else if (elem.attachEvent) {
  49.            elem.attachEvent('on' + type, handler);
  50.        }
  51.  
  52.        return elem;
  53.    };
  54.  
  55.  
  56.    bind(window, 'load', function () {
  57.        bezierCurveTo();
  58.    });
  59.  
  60.  
  61. //]]>
  62. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  63. </body>
  64. </html>



실행 결과:







18. CanvasRenderingContext2D.clip(): 경로로 지정된 모든 도형을 클립 영역으로 지정한다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function clip() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.  
  18.  
  19.        bind(img, 'load', function(){
  20.            ctx.drawImage(img, 0, 0, 500, 344);
  21.        });
  22.  
  23.  
  24.        ctx.beginPath();
  25.        
  26.        // 경로로 지정된 모든 도형은 클립 영역 생성이 가능하다.
  27.  
  28.        //ctx.rect(10, 10, 90, 90);
  29.        ctx.arc(100, 100, 100, 0, Math.PI * 2);
  30.        
  31.        //ctx.moveTo(100, 10);
  32.        //ctx.lineTo(10, 100);
  33.        //ctx.lineTo(190, 100);
  34.  
  35.        ctx.closePath();
  36.        ctx.clip();
  37.  
  38.        
  39.    }
  40.  
  41.  
  42.  
  43.    function bind(elem, type, handler, capture) {
  44.        type = typeof type === 'string' && type || '';
  45.        handler = handler || function () { ; };
  46.        capture = capture || false;
  47.  
  48.        if (elem.addEventListener) {
  49.            elem.addEventListener(type, handler, capture);
  50.        }
  51.        else if (elem.attachEvent) {
  52.            elem.attachEvent('on' + type, handler);
  53.        }
  54.  
  55.        return elem;
  56.    };
  57.  
  58.  
  59.    bind(window, 'load', function () {
  60.        clip();
  61.    });
  62.  
  63.  
  64. //]]>
  65. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  66. </body>
  67. </html>



실행 결과:









19.


CancasRenderingContext2D.drawImage(in HTMLImageElement image, in float dx, in float dy): 

CancasRenderingContext2D.drawImage(in HTMLImageElement image, in float dx, in float dy, optional in float dw, in float dh): 

CancasRenderingContext2D.drawImage(in HTMLImageElement image, in float dx, in float dy, optional in float dw, in float dh, in float sx, in float sy, in float sw, in float sh): 


경로로 지정된 이미지 영역을 지정한다.



dx: 이미지가 그려질 위치 가로 좌표

dy: 이미지가 그려질 위치 세로 좌표   

dw: 그려질 이미지의 가로 폭

dh: 그려질 이미지의 세로 폭

sx: 원 이미지에서 그려질 부분의 가로 시작 좌표

sy: 원 이미지에서 그려질 부분의 세로 시작 좌표

sw: 원 이미지에서 그려질 부분의 가로 폭

sh: 원 이미지에서 그려질 부분의 세로 폭


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function drawImage() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.  
  18.  
  19.        bind(img, 'load', function(){
  20.            ctx.drawImage(img, 0, 0);
  21.            ctx.drawImage(img, 0, 0, img.width / 2, img.height / 2);
  22.            ctx.drawImage(img, 0, 0, 100, 100, 100, 0, 40, 40);
  23.        });
  24.    }
  25.  
  26.  
  27.  
  28.    function bind(elem, type, handler, capture) {
  29.        type = typeof type === 'string' && type || '';
  30.        handler = handler || function () { ; };
  31.        capture = capture || false;
  32.  
  33.        if (elem.addEventListener) {
  34.            elem.addEventListener(type, handler, capture);
  35.        }
  36.        else if (elem.attachEvent) {
  37.            elem.attachEvent('on' + type, handler);
  38.        }
  39.  
  40.        return elem;
  41.    };
  42.  
  43.  
  44.    bind(window, 'load', function () {
  45.        drawImage();
  46.    });
  47.  
  48.  
  49. //]]>
  50. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  51. </body>
  52. </html>



실행결과:







20. CancasRenderingContext2D.getImageData(x, y, w, h): context에 생성된 이미지의 픽셀 데이타를 가져온다.

21. CancasRenderingContext2D.putImageData(data, x, y): 픽셀 데이타로 이미지를 생성한다.


x: 이미지가 그려질 위치 가로 좌표

y: 이미지가 그려질 위치 세로 좌표   

w: 그려질 이미지의 가로 폭

h: 그려질 이미지의 세로 폭


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function bezierCurveTo() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.  
  18.  
  19.        bind(img, 'load', function () {
  20.            ctx.drawImage(img, 0, 0, img.width, img.height);
  21.        });
  22.  
  23.        // 이미지 pixel data로 가져온다.
  24.        var pxs = ctx.getImageData(0, 0, img.width, img.height);
  25.        //pixel 배열 정보에 대한 길이
  26.        alert(pxs.data.length); // [255, 0, 0, 255,....]
  27.  
  28.        // 이미지 pixel data로 컨텍스트에 이미지를 생성한다.
  29.        ctx.putImageData(pxs, 0, 0);
  30.  
  31.    }
  32.  
  33.  
  34.  
  35.    function bind(elem, type, handler, capture) {
  36.        type = typeof type === 'string' && type || '';
  37.        handler = handler || function () { ; };
  38.        capture = capture || false;
  39.  
  40.        if (elem.addEventListener) {
  41.            elem.addEventListener(type, handler, capture);
  42.        }
  43.        else if (elem.attachEvent) {
  44.            elem.attachEvent('on' + type, handler);
  45.        }
  46.  
  47.        return elem;
  48.    };
  49.  
  50.  
  51.    bind(window, 'load', function () {
  52.        bezierCurveTo();
  53.    });
  54.  
  55.  
  56. //]]>
  57. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  58. </body>
  59. </html>






22. CanvasRenderingContext2D.translate(in float x, in float y): context의 이동좌표를 지정한다.


x: 이동할 context의 가로 좌표

y: 이동할 context의 세로 좌표   


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function translate() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        //img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.  
  18.  
  19.        ctx.save();
  20.        ctx.translate(0, 0);
  21.        ctx.fillStyle = "black";
  22.        ctx.fillRect(0, 0, 50, 50);
  23.        ctx.restore();
  24.  
  25.        ctx.save();
  26.        ctx.translate(50, 0);
  27.        ctx.fillStyle = "red";
  28.        ctx.fillRect(0, 0, 50, 50);
  29.        ctx.restore();
  30.  
  31.        ctx.save();
  32.        ctx.translate(100, 0);
  33.        ctx.fillStyle = "green";
  34.        ctx.fillRect(0, 0, 50, 50);
  35.        ctx.restore();
  36.  
  37.        ctx.save();
  38.        ctx.translate(150, 0);
  39.        ctx.fillStyle = "yellow";
  40.        ctx.fillRect(0, 0, 50, 50);
  41.        ctx.restore();
  42.    }
  43.  
  44.  
  45.  
  46.    function bind(elem, type, handler, capture) {
  47.        type = typeof type === 'string' && type || '';
  48.        handler = handler || function () { ; };
  49.        capture = capture || false;
  50.  
  51.        if (elem.addEventListener) {
  52.            elem.addEventListener(type, handler, capture);
  53.        }
  54.        else if (elem.attachEvent) {
  55.            elem.attachEvent('on' + type, handler);
  56.        }
  57.  
  58.        return elem;
  59.    };
  60.  
  61.  
  62.    bind(window, 'load', function () {
  63.        translate();
  64.    });
  65.  
  66.  
  67. //]]>
  68. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  69. </body>
  70. </html>



실행 결과:






23. CanvasRenderingContext2D.save(): context의 현재 상태를 스택에 저장합니다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function save() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        //img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.  
  18.        ctx.fillStyle = "black";
  19.        ctx.fillRect(20, 20, 50, 50);
  20.  
  21.        // 현재 context 상태를 스택에 저장합니다.
  22.        ctx.save();
  23.  
  24.        ctx.fillStyle = "red";
  25.  
  26.        ctx.fillRect(100, 0, 50, 50);
  27.  
  28.        // 현재 context 상태를 복원합니다.
  29.        // 이와 같은 경우 초기 context의 fillStyle에 정의된 컬러(black)가 새롭게 생성된 사각영역에 적용됩니다.
  30.        // 이유는 초기 저장된 context의 상태가 ctx.restore() 메소드로 복원됐기 때문입니다.
  31.        ctx.restore();
  32.        //ctx.fillStyle = "white";
  33.        ctx.fillRect(0, 0, 20, 20);
  34.    }
  35.  
  36.  
  37.  
  38.    function bind(elem, type, handler, capture) {
  39.        type = typeof type === 'string' && type || '';
  40.        handler = handler || function () { ; };
  41.        capture = capture || false;
  42.  
  43.        if (elem.addEventListener) {
  44.            elem.addEventListener(type, handler, capture);
  45.        }
  46.        else if (elem.attachEvent) {
  47.            elem.attachEvent('on' + type, handler);
  48.        }
  49.  
  50.        return elem;
  51.    };
  52.  
  53.  
  54.    bind(window, 'load', function () {
  55.        save();
  56.    });
  57.  
  58.  
  59. //]]>
  60. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  61. </body>
  62. </html>



실행결과:





24. CanvasRenderingContext2D.restore(): 스택에 마지막으로 저장된 context의 상태를 복원합니다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function save() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        //img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.  
  18.        ctx.fillStyle = "black";
  19.        ctx.fillRect(20, 20, 50, 50);
  20.  
  21.        // 현재 context 상태를 스택에 저장합니다.
  22.        ctx.save();
  23.  
  24.        ctx.fillStyle = "red";
  25.  
  26.        ctx.fillRect(100, 0, 50, 50);
  27.  
  28.        // 현재 context 상태를 복원합니다.
  29.        // 이와 같은 경우 초기 context의 fillStyle에 정의된 컬러(black)가 새롭게 생성된 사각영역에 적용됩니다.
  30.        // 이유는 초기 저장된 context의 상태가 ctx.restore() 메소드로 복원됐기 때문입니다.
  31.        ctx.restore();
  32.        //ctx.fillStyle = "white";
  33.        ctx.fillRect(0, 0, 20, 20);
  34.    }
  35.  
  36.  
  37.  
  38.    function bind(elem, type, handler, capture) {
  39.        type = typeof type === 'string' && type || '';
  40.        handler = handler || function () { ; };
  41.        capture = capture || false;
  42.  
  43.        if (elem.addEventListener) {
  44.            elem.addEventListener(type, handler, capture);
  45.        }
  46.        else if (elem.attachEvent) {
  47.            elem.attachEvent('on' + type, handler);
  48.        }
  49.  
  50.        return elem;
  51.    };
  52.  
  53.  
  54.    bind(window, 'load', function () {
  55.        save();
  56.    });
  57.  
  58.  
  59. //]]>
  60. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  61. </body>
  62. </html>



실행결과:





25. CanvasRenderingContext2D.rotate(): 원점을 기준으로 캔퍼스를 회전 시킵니다. 이때 사각영역의 좌표 x, y는 지정하지 않습니다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function rotate() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        //img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.        ctx.fillStyle = "red";
  18.  
  19.        ctx.translate(100, 100);
  20.        
  21.        ctx.fillRect(0, 0, 10, 50);
  22.        ctx.rotate(Math.PI * 2 / 10);
  23.  
  24.        ctx.fillRect(0, 0, 10, 50);
  25.        ctx.rotate(Math.PI * 2 / 10);
  26.  
  27.        ctx.fillRect(0, 0, 10, 50);
  28.        ctx.rotate(Math.PI * 2 / 10);
  29.  
  30.        ctx.fillRect(0, 0, 10, 50);
  31.        ctx.rotate(Math.PI * 2 / 10);
  32.    }
  33.  
  34.  
  35.  
  36.    function bind(elem, type, handler, capture) {
  37.        type = typeof type === 'string' && type || '';
  38.        handler = handler || function () { ; };
  39.        capture = capture || false;
  40.  
  41.        if (elem.addEventListener) {
  42.            elem.addEventListener(type, handler, capture);
  43.        }
  44.        else if (elem.attachEvent) {
  45.            elem.attachEvent('on' + type, handler);
  46.        }
  47.  
  48.        return elem;
  49.    };
  50.  
  51.  
  52.    bind(window, 'load', function () {
  53.        rotate();
  54.    });
  55.  
  56.  
  57. //]]>
  58. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  59. </body>
  60. </html>



실행결과:





26. CanvasRenderingContext2D.transform(in float m11, in float m12, in float m21, in float m22, in float dx, in float dy): 

캔퍼스에 이전에 적용된 변환 행렬 적용 값을 기준으로 새로운 변형 행렬 값을 설정합니다.




  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function transform() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        //img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.        var sin = Math.sin(Math.PI / 6);
  18.        var cos = Math.cos(Math.PI / 6);
  19.  
  20.        ctx.translate(100, 100);
  21.        ctx.fillStyle = "rgb( 200,0,0 )";
  22.        ctx.strokeStyle = "rgb(0,0,0)";
  23.  
  24.        for (var i = 0; i <= 12; i++) {
  25.            ctx.fillRect(0, 0, 30, 30);
  26.            ctx.strokeRect(0, 0, 30, 30);
  27.            ctx.transform(cos, sin, -sin, cos, 0, 0);
  28.        }
  29.    }
  30.  
  31.  
  32.  
  33.    function bind(elem, type, handler, capture) {
  34.        type = typeof type === 'string' && type || '';
  35.        handler = handler || function () { ; };
  36.        capture = capture || false;
  37.  
  38.        if (elem.addEventListener) {
  39.            elem.addEventListener(type, handler, capture);
  40.        }
  41.        else if (elem.attachEvent) {
  42.            elem.attachEvent('on' + type, handler);
  43.        }
  44.  
  45.        return elem;
  46.    };
  47.  
  48.  
  49.    bind(window, 'load', function () {
  50.        transform();
  51.    });
  52.  
  53.  
  54. //]]>
  55. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  56. </body>
  57. </html>



실행결과:






27. CanvasRenderingContext2D.setTransform(in float m11, in float m12, in float m21, in float m22, in float dx, in float dy): 

캔퍼스에 변환 행렬 적용 값을 새로 초기화 하여 설정합니다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function setTransform() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        //img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.        var sin = Math.sin(Math.PI / 6);
  18.        var cos = Math.cos(Math.PI / 6);
  19.  
  20.        ctx.translate(50, 50);
  21.        ctx.fillStyle = "rgb( 200,0,0 )";
  22.        ctx.strokeStyle = "rgb(0,0,0)";
  23.  
  24.        ctx.fillRect(0, 0, 50, 50);
  25.        ctx.strokeRect(0, 0, 50, 50);
  26.  
  27.        ctx.setTransform(cos, sin, -sin, cos, 0, 0);
  28.  
  29.        ctx.translate(100, 100);
  30.        ctx.fillRect(0, 0, 50, 50);
  31.        ctx.strokeRect(0, 0, 50, 50);
  32.    }
  33.  
  34.  
  35.  
  36.    function bind(elem, type, handler, capture) {
  37.        type = typeof type === 'string' && type || '';
  38.        handler = handler || function () { ; };
  39.        capture = capture || false;
  40.  
  41.        if (elem.addEventListener) {
  42.            elem.addEventListener(type, handler, capture);
  43.        }
  44.        else if (elem.attachEvent) {
  45.            elem.attachEvent('on' + type, handler);
  46.        }
  47.  
  48.        return elem;
  49.    };
  50.  
  51.  
  52.    bind(window, 'load', function () {
  53.        setTransform();
  54.    });
  55.  
  56.  
  57. //]]>
  58. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  59. </body>
  60. </html>



실행결과:





28. CanvasRenderingContext2D.lineWidth: canvas 선의 두께를 지정한다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function lineWidth() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        //img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.        // 선의 두께를 정의한다.
  18.        ctx.lineWidth = 12;
  19.        ctx.beginPath();
  20.        ctx.moveTo(100, 100);
  21.        ctx.lineTo(50, 50);
  22.  
  23.        ctx.stroke();
  24.    }
  25.  
  26.  
  27.  
  28.    function bind(elem, type, handler, capture) {
  29.        type = typeof type === 'string' && type || '';
  30.        handler = handler || function () { ; };
  31.        capture = capture || false;
  32.  
  33.        if (elem.addEventListener) {
  34.            elem.addEventListener(type, handler, capture);
  35.        }
  36.        else if (elem.attachEvent) {
  37.            elem.attachEvent('on' + type, handler);
  38.        }
  39.  
  40.        return elem;
  41.    };
  42.  
  43.  
  44.    bind(window, 'load', function () {
  45.        lineWidth();
  46.    });
  47.  
  48.  
  49. //]]>
  50. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  51. </body>
  52. </html>



실행결과:





29. CanvasRenderingContext2D.lineCap: canvas 선의 끝 모양을 지정한다.


butt: 아무런 효과가 없다

round: 선 폭의 1/2을 반지름으로 하는 반원이 선 양쪽 끝에 그려진다.

square: 선 폭의 1/2 높이로 하는 사각형이 손 양쪽 끝에 그려진다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function lineCap() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        //img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.        // 선의 두께를 정의한다.
  18.        ctx.lineWidth = 12;
  19.        ctx.lineCap = 'round';
  20.        ctx.beginPath();
  21.        ctx.moveTo(100, 100);
  22.        ctx.lineTo(50, 50);
  23.  
  24.        ctx.stroke();
  25.    }
  26.  
  27.  
  28.  
  29.    function bind(elem, type, handler, capture) {
  30.        type = typeof type === 'string' && type || '';
  31.        handler = handler || function () { ; };
  32.        capture = capture || false;
  33.  
  34.        if (elem.addEventListener) {
  35.            elem.addEventListener(type, handler, capture);
  36.        }
  37.        else if (elem.attachEvent) {
  38.            elem.attachEvent('on' + type, handler);
  39.        }
  40.  
  41.        return elem;
  42.    };
  43.  
  44.  
  45.    bind(window, 'load', function () {
  46.        lineCap();
  47.    });
  48.  
  49.  
  50. //]]>
  51. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  52. </body>
  53. </html>



실행결과:





30. CanvasRenderingContext2D.lineJoin: canvas 선과 선의 연결 부분의 모양을 지정한다.


round: 둥근 모양으로 연결된다.

bavel: 연결된 부분이 단면으로 남는다.

miter: 연결한 흔적이 남지 않는다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function lineJoin() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        //img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.        // 선의 두께를 정의한다.
  18.        ctx.lineWidth = 12;
  19.        ctx.lineJoin = 'round';
  20.        ctx.beginPath();
  21.        ctx.moveTo(100, 100);
  22.        ctx.lineTo(100, 50);
  23.        ctx.lineTo(150, 100);
  24.  
  25.        ctx.stroke();
  26.    }
  27.  
  28.  
  29.  
  30.    function bind(elem, type, handler, capture) {
  31.        type = typeof type === 'string' && type || '';
  32.        handler = handler || function () { ; };
  33.        capture = capture || false;
  34.  
  35.        if (elem.addEventListener) {
  36.            elem.addEventListener(type, handler, capture);
  37.        }
  38.        else if (elem.attachEvent) {
  39.            elem.attachEvent('on' + type, handler);
  40.        }
  41.  
  42.        return elem;
  43.    };
  44.  
  45.  
  46.    bind(window, 'load', function () {
  47.        lineJoin();
  48.    });
  49.  
  50.  
  51. //]]>
  52. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  53. </body>
  54. </html>



실행결과:





31. CanvasRenderingContext2D.miterLimit: canvas lineJoin 속성이 'miter' 지정되었을 경우 연결선 돌출 부위의 절단 범위를 지정한다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.  
  9.    function miterLimit() {
  10.  
  11.        var cvs = document.getElementById('canvas_test')
  12.          , ctx = cvs.getContext('2d')
  13.          , img = new Image();
  14.  
  15.        //img.src = 'http://movie.phinf.naver.net/20120314_145/1331716835803KBqTp_JPEG/movie_image.jpg?type=m210';
  16.  
  17.        // 선의 두께를 정의한다.
  18.        ctx.lineWidth = 10;
  19.        ctx.lineJoin = 'miter';
  20.        ctx.miterLimit = 1;
  21.  
  22.        ctx.beginPath();
  23.        ctx.moveTo(100, 100);
  24.        ctx.lineTo(100, 50);
  25.        ctx.lineTo(150, 100);
  26.        ctx.stroke();
  27.    }
  28.  
  29.  
  30.  
  31.    function bind(elem, type, handler, capture) {
  32.        type = typeof type === 'string' && type || '';
  33.        handler = handler || function () { ; };
  34.        capture = capture || false;
  35.  
  36.        if (elem.addEventListener) {
  37.            elem.addEventListener(type, handler, capture);
  38.        }
  39.        else if (elem.attachEvent) {
  40.            elem.attachEvent('on' + type, handler);
  41.        }
  42.  
  43.        return elem;
  44.    };
  45.  
  46.  
  47.    bind(window, 'load', function () {
  48.        miterLimit();
  49.    });
  50.  
  51.  
  52. //]]>
  53. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  54. </body>
  55. </html>



실행결과:





32. CanvasRenderingContext2D.createPattern: canvas 경로에 선을 그리거나 색을 채울 때 이미지의 반복 패턴을 정의한다.


반복패턴:


repeat: 양방향으로 이미지가 반복된다.

repeat-x: 가로 방향으로 이미지가 반복된다.

repeat-y: 세로 방향으로 이미지가 반복된다.

no-repeat: 이미지가 반복시키지 않는다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.    function createPattern() {
  9.  
  10.        var cvs = document.getElementById('canvas_test')
  11.          , ctx = cvs.getContext('2d')
  12.          , img = new Image();
  13.  
  14.        img.src = 'http://go.microsoft.com/fwlink/?LinkID=199028';
  15.  
  16.        bind(img, 'load', function () {
  17.        });
  18.  
  19.        var ptn = ctx.createPattern(img, 'repeat');
  20.        ctx.fillStyle = ptn;
  21.        ctx.fillRect(0, 0, 200, 200);
  22.    }
  23.  
  24.    function bind(elem, type, handler, capture) {
  25.  
  26.        type = typeof type === 'string' && type || '';
  27.        handler = handler || function () { ; };
  28.        capture = capture || false;
  29.  
  30.        if (elem.addEventListener) {
  31.            elem.addEventListener(type, handler, capture);
  32.        }
  33.        else if (elem.attachEvent) {
  34.            elem.attachEvent('on' + type, handler);
  35.        }
  36.  
  37.        return elem;
  38.    };
  39.  
  40.  
  41.    bind(window, 'load', function () {
  42.        createPattern();
  43.    });
  44.  
  45.  
  46. //]]>
  47. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  48. </body>
  49. </html>



실행결과:





33. CanvasRenderingContext2D.font:

34. CanvasRenderingContext2D.textAlign:

35. CanvasRenderingContext2D.textBaseLine:


36. CanvasRenderingContext2D.fillText: canvas context에 text를 사용한다.


text: 양방향으로 이미지가 반복된다.

width: 가로 방향으로 이미지가 반복된다.

height: 세로 방향으로 이미지가 반복된다.

max-width: 가로 최대 폭

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.    function fillText() {
  9.  
  10.        var cvs = document.getElementById('canvas_test')
  11.          , ctx = cvs.getContext('2d')
  12.          , img = new Image();
  13.  
  14.        img.src = 'http://go.microsoft.com/fwlink/?LinkID=199028';
  15.  
  16.        // 폰트, 사이즈 지정
  17.        ctx.font = '30px impact';
  18.        // 정렬 지정
  19.        ctx.textAlign = 'center';
  20.        // 포지션 지정
  21.        ctx.textBaseLine = 'top';
  22.  
  23.        ctx.fillText('hello world', 100, 100, 200);
  24.    }
  25.  
  26.    function bind(elem, type, handler, capture) {
  27.  
  28.        type = typeof type === 'string' && type || '';
  29.        handler = handler || function () { ; };
  30.        capture = capture || false;
  31.  
  32.        if (elem.addEventListener) {
  33.            elem.addEventListener(type, handler, capture);
  34.        }
  35.        else if (elem.attachEvent) {
  36.            elem.attachEvent('on' + type, handler);
  37.        }
  38.  
  39.        return elem;
  40.    };
  41.  
  42.  
  43.    bind(window, 'load', function () {
  44.        fillText();
  45.    });
  46.  
  47.  
  48. //]]>
  49. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  50. </body>
  51. </html>



실행결과:






37. CanvasRenderingContext2D.shadowColor: 

38. CanvasRenderingContext2D.shadowOffsetX: 

49. CanvasRenderingContext2D.shadowOffsetY: 

40. CanvasRenderingContext2D.shadowBlur: 


canvas context에 그림자 효과를 사용한다.


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <title>Canvas</title>
  4. </head>
  5. <script type="text/javascript">
  6. //<![CDATA[
  7.  
  8.    function shadow() {
  9.  
  10.        var cvs = document.getElementById('canvas_test')
  11.          , ctx = cvs.getContext('2d')
  12.          , img = new Image();
  13.  
  14.        img.src = 'http://go.microsoft.com/fwlink/?LinkID=199028';
  15.  
  16.        ctx.font = '30px impact';
  17.        ctx.textAlign = 'center';
  18.        ctx.textBaseLine = 'top';
  19.  
  20.        //그림자 적용
  21.        ctx.shadowColor = 'black';
  22.        ctx.shadowOffsetX = 8;
  23.        ctx.shadowOffsetY = 8;
  24.  
  25.        ctx.shadowBlur = 2;
  26.  
  27.        ctx.fillText('hello world', 100, 100, 200);
  28.    }
  29.  
  30.    function bind(elem, type, handler, capture) {
  31.  
  32.        type = typeof type === 'string' && type || '';
  33.        handler = handler || function () { ; };
  34.        capture = capture || false;
  35.  
  36.        if (elem.addEventListener) {
  37.            elem.addEventListener(type, handler, capture);
  38.        }
  39.        else if (elem.attachEvent) {
  40.            elem.attachEvent('on' + type, handler);
  41.        }
  42.  
  43.        return elem;
  44.    };
  45.  
  46.  
  47.    bind(window, 'load', function () { shadow(); });
  48.  
  49. //]]>
  50. <canvas id="canvas_test" width="200" height="200" style="border:black 1px solid"></canvas>
  51. </body>
  52. </html>



실행결과:









레퍼런스 참조사이트:


http://forum.falinux.com/zbxe/?_filter=search&mid=lecture_tip&category=&search_target=title&search_keyword=canvas



캔버스 레퍼런스 PPT:


http://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=5&ved=0CGgQFjAE&url=http%3A%2F%2Fss.textcube.com%2Fblog%2F6%2F63442%2Fattach%2FXc03LsAIk0.ppt%2FHTML5%2520%2526%2520API%2520%25EC%259E%2585%25EB%25AC%25B8(1%25EC%25B0%25A8).ppt&ei=S86oT_fNF8qZiAfGiqnPAw&usg=AFQjCNG_UOVjapQMoUS7sX39WugyfZNP5Q&sig2=ae7GLYQ-say_0u9Riun9vQ