이 글은 주로 캔버스 학습과 필터 구현 코드를 소개합니다. 캔버스를 사용하여 프론트엔드 담당자가 쉽게 이미지 처리를 수행할 수 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
디지털 제품이 확산되는 시대에 사진 촬영은 집에서나 외출에서나 장거리 여행에서나 언제나 아름다운 사진을 찍을 수 있는 삶의 일부가 되었습니다. 하지만 카메라로 직접 촬영한 사진은 우리의 심리적 기대치 사이에 일정한 간격이 있는 경우가 많습니다. 그렇다면 이 간격을 어떻게 줄일 수 있을까요? 정답은 뷰티P사진이다 보니 온갖 뷰티카메라가 쏟아져 나오고 P사진은 휴대가 가능한 기술이 됐다.
사실 소위 아름다움은 많은 필터를 사용하는 것일 뿐이며 필터는 특정 알고리즘을 사용하여 사진 픽셀을 조작하여 특별한 이미지 효과를 얻습니다. Photoshop을 사용해 본 친구들은 PS에 많은 필터가 있다는 것을 알고 있습니다. 아래에서는 js 캔버스 기술을 사용하여 여러 필터 효과를 얻을 것입니다.
최근에 HTML5의 하이라이트인 캔버스
를 배웠습니다. 캔버스를 사용하면 프런트엔드 직원이 쉽게 이미지 처리를 수행할 수 있습니다. API가 많이 있습니다. 이번에는 주로 사용되는 API를 중심으로 공부하여 다음 두 코드를 완성합니다. canvas
。利用 canvas,前端人员可以很轻松地、进行图像处理。其 API 繁多,这次主要学习常用的 API,并且完成以下两个代码:
实现去色滤镜
实现负色(反色)滤镜
1 了解 canvas?
1.1 什么是 canvas?
这个 HTML 元素是为了客户端矢量图形而设计的。它自己没有行为,但却把一个绘图 API 展现给客户端 JavaScript 以使脚本能够把想绘制的东西都绘制到一块画布上。
1.2 canvas 和 svg、vml 的区别?
<canvas></canvas>
标记和 SVG 以及 VML 之间的一个重要的不同是, <canvas></canvas>
有一个基于 JavaScript 的绘图 API,而 SVG 和 VML 使用一个 XML 文档来描述绘图。
2 canvas 绘图学习
大多数 Canvas 绘图 API 都没有定义在 <canvas></canvas>
元素本身上,而是定义在通过画布的 getContext()
方法获得的一个“绘图环境”对象上。而 <canvas></canvas>
元素本身默认的宽高分别是 300px、150px。
2.1 canvas 绘制矩形
// 处理canvas元素 var c = document.querySelector("#my-canvas"); c.width = 150; c.height = 70; // 获取 指定canvas标签 上的context对象 var ctx = c.getContext("2d"); ctx.fillStyle = "#FF0000"; // 颜色 ctx.fillRect(0, 0, 150, 75); // 形状
2.2 canvas 绘制路径
var c = document.querySelector("#my-canvas"); var ctx = c.getContext("2d"); ctx.moveTo(0, 0); // 开始坐标 ctx.lineTo(200, 100); // 结束坐标 ctx.stroke(); // 立即绘制
2.3 canvas 绘制圆形
对于 ctx.arc()
这个接口,5 个参数是: (x,y,r,start,stop)
。其中,x 和 y 是圆心坐标,r 是半径。
而 start
和 stop
的单位是 弧度制 。不是长度,也不是 °。
var c = document.querySelector("#my-canvas"); var ctx = c.getContext("2d"); ctx.beginPath(); ctx.arc(95, 50, 40, 0, 2 * Math.PI); ctx.stroke();
2.4 canvas 绘制文字
var c = document.getElementById("myCanvas"); var ctx = c.getContext("2d"); ctx.font = "30px Arial"; ctx.fillText("Hello World", 10, 50);
3 canvas 图像处理学习
3.1 常用 API 接口
关于图像处理的 API,主要有 4 个:
绘制图像: drawImage(img,x,y,width,height)
或 drawImage(img,sx,sy,swidth,sheight,x,y,width,height)
获取图像数据: getImageData(x,y,width,height)
重写图像数据: putImageData(imgData,x,y[,dirtyX,dirtyY,dirtyWidth,dirtyHeight])
导出图像: toDataURL([type, encoderOptions])
更详细的 API 和参数说明请看: canvas 图像处理 API 参数讲解
3.2 绘制图像
在此些 API 的基础上,我们就可以在 canvas
元素中绘制我们的图片。假设我们图片是 ./img/photo.jpg
。
<script> window.onload = function () { var img = new Image() // 声明新的Image对象 img.src = "./img/photo.jpg" // 图片加载后 img.onload = function () { var canvas = document.querySelector("#my-canvas"); var ctx = canvas.getContext("2d"); // 根据image大小,指定canvas大小 canvas.width = img.width canvas.height = img.height // 绘制图像 ctx.drawImage(img, 0, 0, canvas.width, canvas.height) } } </script>
如下图所示,图片被画入了 canvas:
4 实现滤镜
这里我们主要借用 getImageData
函数,他返回每个像素的 RGBA 值。借助图像处理公式,操作像素进行相应的、数学运算即可。
4.1 去色效果
去色效果相当于就是老旧相机拍出来的黑白照片。人们根据人眼的敏感程度,给出了如下公式:
gray = red * 0.3 + green * 0.59 + blue * 0.11
代码如下:
<script> window.onload = function () { var img = new Image() img.src = "./img/photo.jpg" img.onload = function () { var canvas = document.querySelector("#my-canvas"); var ctx = canvas.getContext("2d"); canvas.width = img.width canvas.height = img.height ctx.drawImage(img, 0, 0, canvas.width, canvas.height) // 开始滤镜处理 var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); for (var i = 0; i < imgData.data.length / 4; ++i) { var red = imgData.data[i * 4], green = imgData.data[i * 4 + 1], blue = imgData.data[i * 4 + 2]; var gray = 0.3 * red + 0.59 * green + 0.11 * blue; // 计算gray // 刷新RGB,注意: // imgData.data[i * 4 + 3]存放的是alpha,不需要改动 imgData.data[i * 4] = gray; imgData.data[i * 4 + 1] = gray; imgData.data[i * 4 + 2] = gray; } ctx.putImageData(imgData, 0, 0); // 重写图像数据 } } </script>
效果如下图所示:
4.2 负色效果
负色效果就是用最大值减去当前值。而 getImageData 获得的 RGB 中的数值理论最大值是:255。所以,公式如下:
new_val = 255 - val
- 색 제거 필터 구현
- 네거티브 컬러(역컬러) 필터 구현
<canvas></canvas>
마크업과 SVG, VML의 중요한 차이점은 <canvas></canvas>
에는 JavaScript 기반 그리기 API, SVG 및 VML이 있다는 것입니다. XML 문서를 사용하여 그림을 설명합니다. 🎜🎜2개의 캔버스 그리기 학습🎜🎜대부분의 캔버스 그리기 API는 <canvas></canvas>
에 정의되어 있지 않습니다. > 요소 자체이지만 캔버스의 getContext()
메서드를 통해 얻은 "그리기 환경" 개체에 정의됩니다. <canvas></canvas>
요소 자체의 기본 너비와 높이는 각각 300px과 150px입니다. 🎜🎜2.1 캔버스는 직사각형을 그립니다.🎜<script> window.onload = function () { var img = new Image() img.src = "./img/photo.jpg" img.onload = function () { var canvas = document.querySelector("#my-canvas"); var ctx = canvas.getContext("2d"); canvas.width = img.width canvas.height = img.height ctx.drawImage(img, 0, 0, canvas.width, canvas.height) // 开始滤镜处理 var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); for (var i = 0; i < imgData.data.length / 4; ++i) { var red = imgData.data[i * 4], green = imgData.data[i * 4 + 1], blue = imgData.data[i * 4 + 2]; // 刷新RGB,注意: // imgData.data[i * 4 + 3]存放的是alpha,不需要改动 imgData.data[i * 4] = 255 - imgData.data[i * 4]; imgData.data[i * 4 + 1] = 255 - imgData.data[i * 4 + 1]; imgData.data[i * 4 + 2] = 255 - imgData.data[i * 4 + 2]; } ctx.putImageData(imgData, 0, 0); // 重写图像数据 } } </script>🎜2.2 캔버스는 경로를 그립니다.🎜rrreee🎜2.3 캔버스는 원을 그립니다.🎜🎜for
ctx.arc()
이 인터페이스에는 (x,y,r,start,stop)
의 5개 매개변수가 있습니다. 그 중 x와 y는 원의 중심 좌표이고, r은 반지름이다. 🎜🎜시작
및 중지
의 단위는 라디안입니다. 길이도 아니고 °도 아닙니다. 🎜rrreee🎜2.4 캔버스 그리기 텍스트🎜rrreee🎜3 캔버스 이미지 처리 학습🎜🎜3.1 일반적으로 사용되는 API 인터페이스🎜🎜이미지 처리에는 주로 4가지 API가 있습니다: 🎜🎜이미지 그리기: drawImage(img,x,y,width,height)
또는 drawImage( img ,sx,sy,swidth,height,x,y,width,height)
🎜🎜이미지 데이터 가져오기: getImageData(x,y,width,height)
🎜🎜이미지 데이터 다시 작성 : putImageData(imgData,x,y[,dirtyX,dirtyY,dirtyWidth,dirtyHeight])
🎜🎜이미지 내보내기: toDataURL([type, EncoderOptions])
🎜🎜자세한 내용 자세한 API 및 매개변수 설명은 다음을 참조하세요. 캔버스 이미지 처리 API 매개변수 설명🎜🎜3.2 이미지 그리기🎜🎜이 API를 기반으로 캔버스
요소를 사용할 수 있습니다. 그림 그리기 안에. 이미지가 ./img/photo.jpg
라고 가정합니다. 🎜rrreee🎜아래 그림과 같이 캔버스에 그림이 그려집니다. 🎜 🎜
4 필터 구현 Strong> 🎜🎜여기서는 주로 각 픽셀의 RGBA 값을 반환하는 getImageData
함수를 차용합니다. 이미지 처리 공식을 사용하면 픽셀을 조작하여 해당 수학 연산을 수행할 수 있습니다. 🎜🎜4.1 색상 제거 효과🎜🎜 색상 제거 효과는 오래된 카메라로 찍은 흑백 사진과 동일합니다. 인간의 눈의 민감도를 기준으로 사람들은 다음 공식을 제시했습니다. 🎜🎜회색 = 빨간색 * 0.3 + 녹색 * 0.59 + 파란색 * 0.11
🎜🎜코드는 다음과 같습니다. 🎜rrreee🎜The 효과는 아래와 같습니다: 🎜
🎜
4.2 음수 색상 효과🎜🎜 음수 색상 효과는 최대값에서 현재 값을 빼는 것입니다. getImageData로 얻은 RGB의 이론적 최대 숫자 값은 255입니다. 따라서 수식은 다음과 같습니다. 🎜🎜new_val = 255 - val
🎜🎜코드는 다음과 같습니다. 🎜rrreee🎜렌더링은 다음과 같습니다. 🎜
요약: 위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다. 더 많은 관련 튜토리얼을 보려면 Html5 비디오 튜토리얼을 방문하세요!
관련 권장 사항:
위 내용은 캔버스 학습 및 필터 구현 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

H5 개발에서 마스터 해야하는 도구 및 프레임 워크에는 vue.js, React 및 Webpack이 포함됩니다. 1.vue.js는 사용자 인터페이스를 구축하고 구성 요소 개발을 지원하는 데 적합합니다. 2. 복잡한 응용 프로그램에 적합한 가상 DOM을 통해 페이지 렌더링을 최적화합니다. 3. Webpack은 모듈 포장에 사용되며 리소스로드를 최적화합니다.

html5hassignificallytransformedwebdevelopmentbyintranticalticlementements, 향상 Multimediasupport 및 Improvingperformance.1) itmadewebsitessmoreaccessibleadseo 친환경적 인 요소, 및 .2) Html5intagnatee

H5는 시맨틱 요소 및 ARIA 속성을 통해 웹 페이지 접근성 및 SEO 효과를 향상시킵니다. 1. 컨텐츠 구조를 구성하고 SEO를 개선하기 위해 사용합니다. 2. Aria-Label과 같은 ARIA 속성은 접근성을 향상시키고 보조 기술 사용자는 웹 페이지를 원활하게 사용할 수 있습니다.

"H5"와 "HTML5"는 대부분의 경우 동일하지만 특정 시나리오에서는 다른 의미를 가질 수 있습니다. "HTML5"는 새로운 태그와 API를 포함하는 W3C 정의 표준입니다. "H5"는 일반적으로 HTML5의 약어이지만 모바일 개발에서는 HTML5를 기반으로 한 프레임 워크를 참조 할 수 있습니다. 이러한 차이를 이해하면 프로젝트 에서이 용어를 정확하게 사용하는 데 도움이됩니다.

H5 또는 HTML5는 HTML의 다섯 번째 버전입니다. 개발자에게 더 강력한 도구 세트를 제공하여 복잡한 웹 애플리케이션을보다 쉽게 만들 수 있습니다. H5의 핵심 기능에는 다음이 포함됩니다. 1) 웹 페이지에 그래픽 및 애니메이션을 그리는 요소; 2) 웹 페이지 구조를 SEO 최적화에 명확하고 도움이되는 시맨틱 태그 등; 3) GeolocationApi 지원 위치 기반 서비스와 같은 새로운 API; 4) 호환성 테스트 및 폴리 필 라이브러리를 통해 크로스 브라우저 호환성을 보장해야합니다.

H5 링크를 만드는 방법? 링크 대상 결정 : H5 페이지 또는 응용 프로그램의 URL을 가져옵니다. HTML 앵커 작성 : & lt; a & gt; 태그 앵커를 만들고 링크 대상 URL을 지정합니다. 링크 속성 설정 (선택 사항) : 필요에 따라 대상, 제목 및 on 클릭 속성을 설정하십시오. 웹 페이지에 추가 : 링크가 나타나려는 웹 페이지에 HTML 앵커 코드를 추가하십시오.

H5 호환성 문제에 대한 솔루션에는 다음이 포함됩니다. 웹 페이지가 화면 크기에 따라 레이아웃을 조정할 수있는 반응 형 디자인을 사용합니다. 릴리스 전에 호환성을 테스트하기 위해 브라우저 크로스 브라우저 테스트 도구를 사용하십시오. PolyFill을 사용하여 이전 브라우저의 새로운 API를 지원합니다. 웹 표준을 따르고 효과적인 코드 및 모범 사례를 사용하십시오. CSS 프리 프로세서를 사용하여 CSS 코드를 단순화하고 가독성을 향상시킵니다. 이미지를 최적화하고 웹 페이지 크기를 줄이며로드 속도를 높이십시오. HTTPS를 통해 웹 사이트의 보안을 보장하십시오.

H5 페이지는 링크를 수동으로 만들거나 짧은 링크 서비스를 사용하는 두 가지 방식으로 링크를 생성 할 수 있습니다. 수동으로 생성하면 H5 페이지의 URL을 복사하면됩니다. 짧은 링크 서비스를 통해 URL을 서비스에 붙여 넣은 다음 단축 된 URL을 가져와야합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
