이 글은 주로 Canvas를 사용하여 사진을 처리하는 방법을 소개합니다. 내용이 꽤 좋아서 지금 공유하고 참고하겠습니다.
Canvas는 HTML5에 새로운
오늘은 Canvas에서 그래픽을 그리는 방법에 대해 이야기하지 않고 그림을 처리하는 방법에 대해 이야기하겠습니다.
과정은 아마도 매우 간단할 것입니다. 주로 다음 세 단계로 나뉩니다.
예, 마치 척하는 것과 같습니다 코끼리 냉장고에 넣는 것만큼 쉽죠, 하하.
1. 메인 API
전체 프로세스에 사용되는 메인 Canvas API는 다음과 같습니다.
이름에서 알 수 있듯이 이 메서드는 캔버스 캔버스에 이미지를 그리는 데 사용됩니다.
① 위치 지정. 캔버스 이미지: context.drawImage(img,x,y)
② 캔버스에 이미지를 배치하고 이미지의 너비와 높이를 지정합니다: context.drawImage(img,x,y,width,height)3 이미지를 자르고 잘라낸 부분을 캔버스에 위치시킵니다: context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height)
위 매개변수 값은 다음과 같이 설명됩니다. 표:
Description | #🎜🎜 # | #🎜 🎜#
---|---|
sx | |
sy | |
폭 | |
키 | |
x | |
y | |
너비 | |
height | |
이 방법 사용 캔버스 캔버스에서 이미지 데이터를 얻으려면 구체적인 사용법은 다음과 같습니다: 캔버스의 지정된 직사각형 범위 내의 픽셀 데이터를 가져옵니다: var ImageData = context.getImageData(x,y,width ,height)
위 매개변수 값은 다음 표에 설명되어 있습니다.# 🎜🎜# | x |
---|---|
y | 왼쪽 상단의 y 좌표가 복사를 시작합니다. |
width | 복사할 직사각형 영역의 너비입니다. |
height | 복사할 직사각형 영역의 높이입니다. |
이 메서드는 너비, 높이, 데이터의 세 가지 속성을 갖는 ImageData 객체를 반환하며, 우리가 주로 사용하는 속성은 다음과 같습니다. 왜냐하면 이미지의 각 픽셀의 데이터를 저장하기 때문입니다. 이러한 데이터를 얻은 후에는 이를 처리하고 최종적으로 캔버스 캔버스에 다시 작성하여 그림 처리 및 변환을 실현할 수 있습니다. 데이터 배열의 구체적인 사용법은 다음 예에서 확인할 수 있습니다. |
context.putImageData(imgData,x,y,dirtyX,dirtyY,dirtyWidth,dirtyHeight)
#🎜🎜 ## ## ######매개 변수#######설명#### ## ## ## ## ####imgdata#🎜 🎜#
은 캔버스의 ImageData 개체를 다시 넣도록 지정됩니다. xy | ||||||
---|---|---|---|---|---|---|
dirtyX | 선택사항. 캔버스에 이미지를 배치할 가로 값(x)(픽셀 단위)입니다. | |||||
dirtyY | 선택사항. 캔버스에 이미지를 배치할 가로 값(y)(픽셀 단위)입니다. | |||||
dirtyWidth | 선택사항. 캔버스에 이미지를 그리는 데 사용되는 너비입니다. | |||||
dirtyHeight | 선택사항. 캔버스에 이미지가 그려지는 높이입니다. | |||||
4. toDataURL() 这个方法与以上三种方法不同,它是Canvas对象的方法,该方法返回的是一个包含data URI的字符串,该字符串可直接作为图片路径地址填入标签的src属性当中,具体用法如下: var dataURL = canvas.toDataURL(type, encoderOptions); 로그인 후 복사 以上参数值描述如下表:
二、图片处理实例 本实例将通过代码简单介绍如何把彩色图片处理成黑白图片。 <!--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('2d'); //获取2D上下文对象,大多数Canvas API均为此对象方法 var image = new Image(); //定义一个图片对象 image.src = 'imgs/img.jpg'; 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 = ''; result.appendChild(newImg); }; }; }; 로그인 후 복사 可能上面代码写得不是很好,看起来也不是那么好理解,最好自己能够亲自写一写,这样对于自己理解会更加深刻一些。 以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网! 相关推荐: HTML5 Plus 实现手机APP拍照或相册选择图片上传的功能 위 내용은 Canvas를 사용하여 이미지를 처리하는 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
최신 이슈
바닥을 자체 높이의 100%로 설정
페이지 보기에서 숨겨지고 상단이 페이지 하단에 닿도록 요소를 설정하고 싶습니다(요소가 보이지 않음). 요소의 높이가 66px로 일정할 때 먼저 하단:-66px;'...
에서 2024-04-04 22:41:16
0
1
1438
서버가 <picture> 태그에 2개 이상의 이미지를 보내고 대체됩니까?
이렇게 구현된 이미지 태그가 궁금합니다. <picture><sourcesrcset="path/img.webp"type="...
에서 2024-04-03 09:05:59
0
1
290
Array JS의 이미지 52개
저는 IT Assistant 1년을 공부하고 있으며 현재 JavaScriptHTML 및 CSS를 사용하여 카드 게임을 코딩해야 합니다. 내 질문은: 어떻게 JS에...
에서 2024-03-30 21:14:49
0
1
272
관련 주제
더>
|