CamanJS를 사용하여 사용자 정의 이미지 편집기 개발: 확장된 필터 옵션 및 혼합 모드
CamanJS 이미지 편집기 시리즈의 첫 번째 튜토리얼에서는 내장된 필터만 사용하여 이미지를 편집합니다. 이는 밝기, 대비 및 빈티지, 일출 등과 같은 18가지 더 복잡한 필터와 같은 몇 가지 기본 효과로 제한됩니다. 모두 적용하기 쉽지만 편집하려는 이미지의 개별 픽셀을 완전히 제어할 수는 없습니다.
이 두 번째 튜토리얼에서는 편집 중인 이미지를 더 효과적으로 제어할 수 있는 레이어와 혼합 모드에 대해 배웠습니다. 예를 들어 캔버스에 새 레이어를 추가하고 색상이나 이미지로 채운 다음 상위 레이어에 배치하고 혼합 모드를 적용할 수 있습니다. 그러나 아직 자체 필터를 만들지 않았으며 적용할 수 있는 블렌딩 모드는 CamanJS에서 이미 제공하는 모드로 제한됩니다.
이 튜토리얼의 목적은 자신만의 혼합 모드와 필터를 만드는 방법을 가르치는 것입니다. 또한 라이브러리에 있는 몇 가지 버그와 자신의 프로젝트에서 CamanJS를 사용할 때 이를 패치하는 방법을 다룰 것입니다.
새로운 혼합 모드 만들기
기본적으로 CamanJS는 10가지 블렌딩 모드를 제공합니다. Normal, Multiply, Mask, Add, Difference, Add, Exclude, Soft Light, Lighten 및 Darken이 있습니다. 라이브러리를 사용하면 자신만의 블렌딩 모드를 등록할 수도 있습니다. 이런 방식으로 현재 레이어와 상위 레이어의 해당 픽셀을 혼합하여 최종 결과를 생성하는 방법을 제어할 수 있습니다.
채널의 최종 값을 Caman.Blender.register("blend_mode", callback);
创建新的混合模式。此处,blend_mode
是您要用来识别您正在创建的混合模式的名称。回调函数接受两个参数,其中包含当前图层上不同像素和父图层上相应像素的 RGB 值。该函数返回一个对象,其中包含 rgb
사용할 수 있습니다.
다음은 상위 레이어의 해당 픽셀 채널 값이 128을 초과하는 경우 픽셀의 각 채널 값을 255로 설정하는 사용자 정의 블렌드 모드의 예입니다. 값이 128보다 작은 경우 최종 채널 값은 상위 채널 값에서 현재 레이어 채널 값을 뺀 값입니다. 이 블렌딩 모드의 이름은 maxrgb
입니다.
비슷한 방식으로 또 다른 블렌드 모드를 만들어 보겠습니다. 이번에는 상위 레이어의 해당 픽셀의 채널 값이 128보다 크면 최종 채널 값은 0으로 설정됩니다. 상위 레이어의 채널 값이 128보다 작은 경우 최종 결과는 특정 픽셀에 대해 현재 레이어와 상위 레이어의 채널 값을 더한 결과가 됩니다. 이 혼합 모드의 이름은 minrgb
입니다.
자신만의 블렌드 모드를 만들어서 연습해 보세요.
새로운 픽셀 기반 필터 만들기
CamanJS에는 크게 두 가지 유형의 필터가 있습니다. 한 번에 한 픽셀씩 전체 이미지에 대해 작업을 수행하거나 컨볼루션 커널을 사용하여 이미지를 수정할 수 있습니다. 컨볼루션 커널은 주변 픽셀을 기반으로 픽셀의 색상을 결정하는 행렬입니다. 이 섹션에서는 픽셀 기반 필터에 중점을 둡니다. 커널 작업은 다음 섹션에서 다룹니다.
픽셀 기반 필터는 RGB 채널 값을 한 번에 한 픽셀씩 제공합니다. 특정 픽셀의 최종 RGB 값은 주변 픽셀의 영향을 받지 않습니다. Caman.Filter.register("filter_name", callback);
创建自己的过滤器。您创建的任何过滤器都必须调用 process()
방법을 사용할 수 있습니다. 이 메소드는 필터 이름과 콜백 함수를 매개변수로 받아들입니다.
다음 코드 조각은 이미지를 회색조로 바꾸는 픽셀 기반 필터를 만드는 방법을 보여줍니다. 이는 각 픽셀의 휘도를 계산한 다음 개별 채널의 값을 계산된 휘도와 동일하게 설정하여 수행됩니다.
으아악비슷한 방법으로 임계값 필터를 만들 수 있습니다. 이번에는 사용자가 기준점을 통과하도록 허용하겠습니다. 특정 픽셀의 밝기가 사용자가 제공한 한계보다 높으면 해당 픽셀은 흰색이 됩니다. 특정 픽셀의 밝기가 사용자가 제공한 한도 아래로 떨어지면 해당 픽셀은 검게 변합니다.
으아악연습으로, 예를 들어 모든 픽셀에서 특정 채널의 값을 높이는 등 자신만의 픽셀 기반 필터를 만들어 보세요.
CamanJS를 사용하면 현재 픽셀의 색상을 조작하는 대신 절대 및 상대적으로 위치된 픽셀의 색상을 설정할 수 있습니다. 불행하게도 이 동작은 약간 버그가 있어서 일부 메서드를 재정의해야 합니다. 이 라이브러리의 소스 코드를 보면 getPixel()
和 putPixel()
等方法调用了 方法<code class="inline">this
上的 和 上的 和 를 알 수 있습니다. 그러나 이러한 메서드는 프로토타입이 아니라 클래스 자체에 정의됩니다.
이 라이브러리의 또 다른 문제는 putPixelRelative()
方法在两个不同的地方使用变量名称 nowLoc
而不是 newLoc
입니다. 스크립트에 다음 코드를 추가하면 두 문제를 모두 해결할 수 있습니다.
Caman.Pixel.prototype.coordinatesToLocation = Caman.Pixel.coordinatesToLocation Caman.Pixel.prototype.locationToCoordinates = Caman.Pixel.locationToCoordinates Caman.Pixel.prototype.putPixelRelative = function (horiz, vert, rgba) { var newLoc; if (this.c == null) { throw "Requires a CamanJS context"; } newLoc = this.loc + (this.c.dimensions.width * 4 * (vert * -1)) + (4 * horiz); if (newLoc > this.c.pixelData.length || newLoc < 0) { return; } this.c.pixelData[newLoc] = rgba.r; this.c.pixelData[newLoc + 1] = rgba.g; this.c.pixelData[newLoc + 2] = rgba.b; this.c.pixelData[newLoc + 3] = rgba.a; return true; };
更正代码后,您现在应该能够创建依赖于 putPixelRelative()
的过滤器,没有任何问题。这是我创建的一个这样的过滤器。
Caman.Filter.register("erased", function (adjust) { this.process("erased", function (rgba) { if(Math.random() < 0.25) { rgba.putPixelRelative(2, 2, { r: 255, g: 255, b: 255, a: 255 }); } }); return this; });
此过滤器将当前像素向上两行和右侧两列的像素值随机设置为白色。这会擦除部分图像。这就是过滤器名称的由来。
创建新的基于内核操作的过滤器
正如我之前提到的,CamanJS 允许您创建自定义滤镜,其中当前像素的颜色由其周围的像素决定。基本上,这些滤镜会遍历您正在编辑的图像中的每个像素。图像中的一个像素将被其他八个像素包围。图像中这九个像素的值乘以卷积矩阵的相应条目。然后将所有这些乘积加在一起以获得像素的最终颜色值。您可以在 GIMP 文档中更详细地了解该过程。
就像基于像素的过滤器一样,您可以使用 Caman.Filter.register("filter_name", callback);
定义自己的内核操作过滤器。唯一的区别是您现在将在回调函数内调用 processKernel()
。
这是使用内核操作创建浮雕过滤器的示例。
Caman.Filter.register("emboss", function () { this.processKernel("emboss", [ -2, -1, 0, -1, 1, 1, 0, 1, 2 ]); });
以下 CodePen 演示将展示我们在本教程中创建的所有过滤器的实际操作。
最终想法
在本系列中,我几乎涵盖了 CamanJS 在基于画布的图像编辑方面提供的所有内容。您现在应该能够使用所有内置滤镜、创建新图层、在这些图层上应用混合模式以及定义您自己的混合模式和滤镜功能。
您还可以浏览 CamanJS 网站上的指南,以了解我可能错过的任何内容。我还建议您阅读该库的源代码,以了解有关图像处理的更多信息。这也将帮助您发现库中的任何其他错误。
위 내용은 CamanJS를 사용하여 사용자 정의 이미지 편집기 개발: 확장된 필터 옵션 및 혼합 모드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











WordPress는 초보자가 쉽게 시작할 수 있습니다. 1. 백그라운드에 로그인 한 후 사용자 인터페이스는 직관적이며 간단한 대시 보드는 필요한 모든 기능 링크를 제공합니다. 2. 기본 작업에는 컨텐츠 작성 및 편집이 포함됩니다. Wysiwyg 편집기는 컨텐츠 생성을 단순화합니다. 3. 초보자는 플러그인 및 테마를 통해 웹 사이트 기능을 확장 할 수 있으며 학습 곡선은 존재하지만 연습을 통해 마스터 할 수 있습니다.

WordPressIsGoodForVirtSallyWebProjectDueToitsAcms.itexcelsin : 1) 사용자 친화적 인, easywebsiteseSetup; 2) 유연성 및 커스텀 화를 허용합니다

WIX는 프로그래밍 경험이없는 사용자에게 적합하며 WordPress는 더 많은 제어 및 확장 기능을 원하는 사용자에게 적합합니다. 1) Wix는 드래그 앤 드롭 편집자와 풍부한 템플릿을 제공하여 웹 사이트를 신속하게 구축 할 수 있습니다. 2) 오픈 소스 CMS로서 WordPress는 거대한 커뮤니티 및 플러그인 생태계를 보유하고 있으며 심층적 인 사용자 정의 및 확장을 지원합니다.

WordPress 자체는 무료이지만 사용 비용은 추가 비용이 필요합니다. 1. WordPress.com은 무료에서 유료에 이르는 패키지를 제공하며, 한 달에 몇 달러에서 수십 달러에 이르는 가격으로 가격이 제공됩니다. 2. WordPress.org는 도메인 이름 (연간 10-20 달러)과 호스팅 서비스 (월 5-50 달러)를 구매해야합니다. 3. 대부분의 플러그인과 테마는 무료이며 유급 가격은 수십에서 수백 달러 사이입니다. 플러그인과 테마를 합리적으로 사용하고 정기적으로 유지하고 최적화하는 올바른 호스팅 서비스를 선택함으로써 WordPress의 비용은 효과적으로 제어되고 최적화 될 수 있습니다.

사람들은 힘과 유연성 때문에 WordPress를 사용하기로 선택합니다. 1) WordPress는 다양한 웹 사이트 요구에 적합한 사용 편의성 및 확장 성을 가진 오픈 소스 CM입니다. 2) 풍부한 주제와 플러그인, 거대한 생태계 및 강력한 지역 사회 지원이 있습니다. 3) WordPress의 작동 원리는 테마, 플러그인 및 핵심 기능을 기반으로하며 PHP 및 MySQL을 사용하여 데이터를 처리하며 성능 최적화를 지원합니다.

WordPress의 핵심 버전은 무료이지만 사용 중에 다른 요금이 발생할 수 있습니다. 1. 도메인 이름과 호스팅 서비스에는 지불이 필요합니다. 2. 고급 테마 및 플러그인이 충전 될 수 있습니다. 3. 전문 서비스 및 고급 기능이 청구될 수 있습니다.

WordPress는 CMS (Content Management System)입니다. 웹 사이트 콘텐츠의 생성 및 관리를 지원하기 위해 컨텐츠 관리, 사용자 관리, 테마 및 플러그인 기능을 제공합니다. 작업 원칙에는 데이터베이스 관리, 템플릿 시스템 및 플러그인 아키텍처가 포함되며 블로그에서 회사 웹 사이트에 이르기까지 다양한 요구에 적합합니다.

3 일 이내에 WordPress를 배울 수 있습니다. 1. 테마, 플러그인 등과 같은 마스터 기본 지식 2. 설치 및 작업 원칙을 포함한 핵심 기능을 이해하십시오. 3. 예제를 통해 기본 및 고급 사용법을 배우십시오. 4. 디버깅 기술 및 성능 최적화 제안을 이해하십시오.
