>  기사  >  웹 프론트엔드  >  Canvas를 사용하여 이미지를 처리하는 방법 소개

Canvas를 사용하여 이미지를 처리하는 방법 소개

不言
不言원래의
2018-07-03 09:31:281420검색

이 글은 주로 Canvas를 사용하여 사진을 처리하는 방법을 소개합니다. 내용이 꽤 좋아서 지금 공유하고 참고하겠습니다.

Canvas는 HTML5에 새로운 5ba626b379994d53f7acf72a64f9b697 요소를 포함하며, JavaScript와 결합하여 캔버스에 그래픽을 동적으로 그릴 수 있습니다.

오늘은 Canvas에서 그래픽을 그리는 방법에 대해 이야기하지 않고 그림을 처리하는 방법에 대해 이야기하겠습니다.

과정은 아마도 매우 간단할 것입니다. 주로 다음 세 단계로 나뉩니다.

예, 마치 척하는 것과 같습니다 코끼리 냉장고에 넣는 것만큼 쉽죠, 하하.

1. 메인 API

전체 프로세스에 사용되는 메인 Canvas API는 다음과 같습니다.

    #🎜🎜 #
  1. 이미지 그리기: drawImage()

  2. 이미지 데이터 가져오기: getImageData()

  3. #🎜🎜 # 이미지 데이터 다시 쓰기: putImageData()
  4. 이미지 내보내기: toDataURL()
1. drawImage()

이름에서 알 수 있듯이 이 메서드는 캔버스 캔버스에 이미지를 그리는 데 사용됩니다.

① 위치 지정. 캔버스 이미지: context.drawImage(img,x,y)

② 캔버스에 이미지를 배치하고 이미지의 너비와 높이를 지정합니다: context.drawImage(img,x,y,width,height)

3 이미지를 자르고 잘라낸 부분을 캔버스에 위치시킵니다: context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height)

위 매개변수 값은 다음과 같이 설명됩니다. 표:

Parameter #🎜 🎜#img사용할 이미지, 캔버스 또는 비디오를 지정합니다. 선택사항. 자르기를 시작할 X 좌표 위치입니다. 선택사항. 절단을 시작할 Y좌표 위치입니다. 선택사항. 자른 이미지의 너비입니다. 선택사항. 잘린 이미지의 높이입니다. 캔버스에 이미지의 x 좌표 위치를 배치합니다. 캔버스에 이미지의 y 좌표 위치를 배치합니다. 선택사항. 사용할 이미지의 너비입니다. (이미지 늘리기 또는 줄이기) 선택사항. 사용할 이미지의 높이입니다. (이미지 늘리기 또는 줄이기) 2.getImageData()
Description #🎜🎜 #
sx
sy
x
y
너비
height

이 방법 사용 캔버스 캔버스에서 이미지 데이터를 얻으려면 구체적인 사용법은 다음과 같습니다: 캔버스의 지정된 직사각형 범위 내의 픽셀 데이터를 가져옵니다: var ImageData = context.getImageData(x,y,width ,height)

위 매개변수 값은 다음 표에 설명되어 있습니다.


ParameterDescription # 🎜🎜#x복사를 시작하려면 왼쪽 상단의 x 좌표를 사용하세요. y왼쪽 상단의 y 좌표가 복사를 시작합니다. width복사할 직사각형 영역의 너비입니다. height복사할 직사각형 영역의 높이입니다. 3.putImageData()
이 메서드는 너비, 높이, 데이터의 세 가지 속성을 갖는 ImageData 객체를 반환하며, 우리가 주로 사용하는 속성은 다음과 같습니다. 왜냐하면 이미지의 각 픽셀의 데이터를 저장하기 때문입니다. 이러한 데이터를 얻은 후에는 이를 처리하고 최종적으로 캔버스 캔버스에 다시 작성하여 그림 처리 및 변환을 실현할 수 있습니다. 데이터 배열의 구체적인 사용법은 다음 예에서 확인할 수 있습니다.

이 방법은 매우 간단하며 이미지 데이터를 캔버스 캔버스에 다시 쓰는 데 사용됩니다. 사용법은 다음과 같습니다:

context.putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight)

위의 매개변수 값은 다음 표에 설명되어 있습니다.

#🎜🎜 ## ## ######매개 변수#######설명#### ## ## ## ## ####imgdata#🎜 🎜#

은 캔버스의 ImageData 개체를 다시 넣도록 지정됩니다.

xImageData 개체 왼쪽 위 모서리의 x 좌표(픽셀)입니다. ImageData 개체 왼쪽 위 모서리의 y 좌표(픽셀)입니다.
y
dirtyX 선택사항. 캔버스에 이미지를 배치할 가로 값(x)(픽셀 단위)입니다.
dirtyY 선택사항. 캔버스에 이미지를 배치할 가로 값(y)(픽셀 단위)입니다.
dirtyWidth 선택사항. 캔버스에 이미지를 그리는 데 사용되는 너비입니다.
dirtyHeight 선택사항. 캔버스에 이미지가 그려지는 높이입니다.

4. toDataURL()

这个方法与以上三种方法不同,它是Canvas对象的方法,该方法返回的是一个包含data URI的字符串,该字符串可直接作为图片路径地址填入a1f02c36ba31691bcfe87b2722de723b标签的src属性当中,具体用法如下:

var dataURL = canvas.toDataURL(type, encoderOptions);

以上参数值描述如下表:

参数 描述
type 可选。图片格式,默认为 image/png。
encoderOptions 可选。在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略。

二、图片处理实例

本实例将通过代码简单介绍如何把彩色图片处理成黑白图片。

<!--HTML-->
<canvas id="canvas" width="600" height="600"></canvas>
<input id="handle" type="button" value="处理图片" />
<input id="create" type="button" value="生成图片" />
<p id="result"></p>

//JavaScript
window.onload = function(){
    var canvas = document.getElementById("canvas"),   //获取Canvas画布对象
        context = canvas.getContext(&#39;2d&#39;);  //获取2D上下文对象,大多数Canvas API均为此对象方法
    var image = new Image();  //定义一个图片对象
    image.src = &#39;imgs/img.jpg&#39;;  
    image.onload = function(){  //此处必须注意!后面所有操作均需在图片加载成功后执行,否则图片将处理无效
        context.drawImage(image,0,0);  //将图片从Canvas画布的左上角(0,0)位置开始绘制,大小默认为图片实际大小
        var handle = document.getElementById("handle");
        var create = document.getElementById("create");
        handle.onclick = function(){  // 单击“处理图片”按钮,处理图片
            var imgData = context.getImageData(0,0,canvas.width,canvas.height);   //获取图片数据对象
            var data = imgData.data;  //获取图片数据数组,该数组中每个像素用4个元素来保存,分别表示红、绿、蓝和透明度值
            var average = 0;
            for (var i = 0; i < data.length; i+=4) {
                average = Math.floor((data[i]+data[i+1]+data[i+2])/3);  //将红、绿、蓝色值求平均值后得到灰度值
                data[i] = data[i+1] = data[i+2] = average;  将每个像素点的色值重写
            }
            imgData.data = data;
            context.putImageData(imgData,0,0);  //将处理后的图像数据重写至Canvas画布,此时画布中图像变为黑白色
        };
        create.onclick = function(){  // 单击“生成图片”按钮,导出图片
            var imgSrc = canvas.toDataURL();  //获取图片的DataURL
            var newImg = new Image();
            var result = document.getElementById("result");
            newImg.src = imgSrc;  //将图片路径赋值给src
            result.innerHTML = &#39;&#39;;
            result.appendChild(newImg);
        };
    };
};

可能上面代码写得不是很好,看起来也不是那么好理解,最好自己能够亲自写一写,这样对于自己理解会更加深刻一些。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

HTML5 Plus 实现手机APP拍照或相册选择图片上传的功能

利用HTML5中的Canvas绘制笑脸的代码

위 내용은 Canvas를 사용하여 이미지를 처리하는 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.