목차
CamanJS의 레이어
CamanJS의 혼합 모드
CamanJS 中的事件
最终想法
웹 프론트엔드 JS 튜토리얼 CamanJS를 사용하여 이미지 편집 도구 개발: 레이어 탐색, 혼합 모드 및 이벤트 처리

CamanJS를 사용하여 이미지 편집 도구 개발: 레이어 탐색, 혼합 모드 및 이벤트 처리

Sep 04, 2023 pm 06:37 PM

使用 CamanJS 开发图像编辑工具:探索图层、混合模式和事件处理

이전 튜토리얼에서는 CamanJS를 사용하여 대비, 밝기, 노이즈 등의 기본 필터를 이미지에 적용할 수 있는 이미지 편집기를 만드는 방법을 배웠습니다. CamanJS에는 향수, 핀홀, 일출 등과 같은 다른 내장 필터도 있어 이미지에 직접 적용할 수 있습니다.

이 튜토리얼에서는 레이어, 블렌드 모드, 이벤트 등 라이브러리의 고급 기능 중 일부를 다룹니다.

CamanJS의 레이어

이 첫 번째 튜토리얼에서는 이미지가 포함된 단일 레이어만 사용합니다. 우리가 적용하는 모든 필터는 이 기본 레이어만 조작합니다. CamanJS를 사용하면 여러 레이어를 생성하여 보다 복잡한 방식으로 이미지를 편집할 수 있습니다. 중첩된 레이어를 만들 수 있지만 항상 스택처럼 상위 레이어에 적용됩니다.

새 레이어를 만들어 상위 레이어에 적용할 때마다 사용되는 기본 혼합 모드는 캔버스에 새 레이어를 만드는 normal。您可以使用 newLayer() 방법이 됩니다. 새 레이어를 생성할 때 콜백 함수를 전달할 수도 있는데, 이는 레이어를 조작하려는 경우 유용할 수 있습니다.

이 기능은 setBlendingMode() 方法设置新图层的混合模式。同样,您可以使用 opacity() 메서드를 사용하여 새 레이어의 불투명도를 제어하는 ​​등 다양한 작업에 사용할 수 있습니다.

새 레이어를 만들면 fillColor() 方法填充纯色。您还可以使用 copyParent() 方法将父层的内容复制到新层。我们在上一个教程中学到的所有过滤器也可以应用于我们正在创建的新图层。例如,您可以使用 this.filter.brightness(10)을 사용하여 새로 만든 레이어의 밝기를 높일 수 있습니다.

상위 이미지를 복사하거나 레이어를 단색으로 채우는 대신 레이어에 다른 이미지를 로드하여 상위 이미지에 오버레이하도록 선택할 수도 있습니다. 기본 이미지와 마찬가지로 오버레이 이미지에도 다양한 필터를 적용할 수 있습니다.

아래 코드 조각에서는 새 레이어를 단색, 상위 레이어 및 오버레이 이미지로 각각 채우는 세 개의 버튼에 클릭 이벤트 핸들러를 연결합니다.

으아아아

CamanJS의 혼합 모드

이전 섹션에서는 캔버스에 추가한 새 레이어의 불투명도를 100 미만으로 유지했습니다. 이는 새 레이어가 이전 레이어를 완전히 숨기기 때문에 수행됩니다. 한 레이어를 다른 레이어 위에 배치할 때 CamanJS를 사용하면 배치 후 최종 결과를 결정하는 혼합 모드를 지정할 수 있습니다. 블렌딩 모드는 기본적으로 normal로 설정되어 있습니다.

즉, 캔버스에 새 레이어를 추가하면 그 아래 레이어가 보이지 않게 됩니다. 이 라이브러리에는 10가지 혼합 모드가 있습니다. 正常乘法屏幕覆盖差异添加排除softLight排除暗化 입니다.

앞서 언급했듯이 normal 混合模式将最终颜色设置为等于新图层的颜色。 multiply 混合模式通过将各个通道相乘,然后将结果除以 255 来确定像素的最终颜色。 multiplyaddition 블렌딩 모드는 최종 색상을 새 레이어의 색상과 동일하게 설정합니다. 곱하기 혼합 모드는 개별 채널을 곱하고 그 결과를 255로 나누어 픽셀의 최종 색상을 결정합니다. 곱하기덧셈 혼합 모드의 차이점은 비슷하게 작동하지만 채널을 빼고 더합니다.

darken 混合模式将像素的最终颜色设置为等于各个颜色通道的最低值。 lighten 混合模式将像素的最终颜色设置为等于各个颜色通道的最高值。 exclusion 混合模式与 difference 有点相似,但它将对比度设置为较低的值。在 screen 블렌딩 모드의 경우 각 레이어의 색상을 반전시킨 후 곱한 후 다시 반전시켜 최종 색상을 얻습니다.

밑색이 더 어두우면 overlay 混合模式的作用类似于 multiply;如果底部颜色较浅,则其作用类似于 screen.

CamanJS를 사용하면 서로 다른 레이어의 색상이 다르게 상호 작용하도록 원하는 경우 자신만의 혼합 모드를 정의할 수도 있습니다. 이 시리즈의 다음 튜토리얼에서 이에 대해 다룰 것입니다.

이미지에 다양한 혼합 모드를 적용하는 JavaScript 코드는 다음과 같습니다.

으아아아

위 코드 조각에서는 입력 필드에서 16진수 색상 값을 가져옵니다. 그런 다음 해당 색상을 새 레이어에 적용합니다. 유사한 방식으로 다른 혼합 모드를 적용하는 코드를 작성할 수 있습니다.

尝试在输入字段中指定您选择的颜色,然后通过单击相应的按钮应用任何混合模式。在示例中,我已将混合模式应用于纯色,但您也可以将它们应用于上一节中的重叠图像。

CamanJS 中的事件

如果您在第一个教程或第二个教程的演示中上传了任何大图像,您可能会注意到,任何应用的滤镜或混合模式的结果在很长一段时间后变得明显。

大图像具有大量像素,在应用特定混合模式后计算每个像素的不同通道的最终值可能非常耗时。例如,当对尺寸为 1920*1080 的图像应用 multiply 混合模式时,设备必须执行超过 600 万次乘法和除法。

在这种情况下,您可以使用事件向用户提供有关滤镜或混合模式进度的一些指示。 CamanJS 有五个不同的事件,可用于在不同阶段执行特定的回调函数。这五个事件是 processStartprocessCompleterenderFinishedblockStartedblockFinished

processStartprocessComplete 事件在单个过滤器开始或完成其渲染过程后触发。当您指定的所有过滤器都已应用于图像时,库将触发 renderFinished 事件。

CamanJS 在开始操作之前将大图像分成块。 blockStartedblockFinished 事件在库处理完图像的各个块后触发。

在我们的示例中,我们将仅使用 processStartrenderFinished 事件来通知用户图像编辑操作的进度。

Caman.Event.listen("processStart", function (process) {
    $(".process-message").text('Applying ' + process.name);
});
Caman.Event.listen("renderFinished", function () {
    $(".process-message").text("Done!");
});
로그인 후 복사

通过 processStartprocessFinish 事件,您可以访问当前在图像上运行的进程的名称。另一方面,blockStartedblockFinished 事件使您可以访问块总数、当前正在处理的块以及已完成块的数量等信息。

尝试单击下面演示中的任何按钮,您将在画布下方的区域中看到当前操作图像的进程的名称。

最终想法

本系列的第一个教程向您展示了如何使用 CamanJS 库中的内置滤镜创建基本图像编辑器。本教程向您展示了如何处理多个图层以及如何对每个图层单独应用不同的滤镜和混合模式。

由于大图像的图像编辑过程可能需要一段时间,因此我们还学习了如何向用户表明图像编辑器实际上正在处理图像而不是闲置。

在本系列的下一个也是最后一个教程中,您将学习如何在 CamanJS 中创建自己的混合模式和滤镜。如果您对本教程有任何疑问,请随时在评论中告诉我。

위 내용은 CamanJS를 사용하여 이미지 편집 도구 개발: 레이어 탐색, 혼합 모드 및 이벤트 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

내 자신의 JavaScript 라이브러리를 어떻게 작성하고 게시합니까? 내 자신의 JavaScript 라이브러리를 어떻게 작성하고 게시합니까? Mar 18, 2025 pm 03:12 PM

기사는 JavaScript 라이브러리 작성, 게시 및 유지 관리, 계획, 개발, 테스트, 문서 및 홍보 전략에 중점을 둡니다.

브라우저에서 성능을 위해 JavaScript 코드를 최적화하려면 어떻게해야합니까? 브라우저에서 성능을 위해 JavaScript 코드를 최적화하려면 어떻게해야합니까? Mar 18, 2025 pm 03:14 PM

이 기사는 브라우저에서 JavaScript 성능을 최적화하기위한 전략에 대해 설명하고 실행 시간을 줄이고 페이지로드 속도에 미치는 영향을 최소화하는 데 중점을 둡니다.

프론트 엔드 열 용지 영수증에 대한 차량 코드 인쇄를 만나면 어떻게해야합니까? 프론트 엔드 열 용지 영수증에 대한 차량 코드 인쇄를 만나면 어떻게해야합니까? Apr 04, 2025 pm 02:42 PM

프론트 엔드 개발시 프론트 엔드 열지대 티켓 인쇄를위한 자주 묻는 질문과 솔루션, 티켓 인쇄는 일반적인 요구 사항입니다. 그러나 많은 개발자들이 구현하고 있습니다 ...

브라우저 개발자 도구를 사용하여 JavaScript 코드를 효과적으로 디버그하려면 어떻게해야합니까? 브라우저 개발자 도구를 사용하여 JavaScript 코드를 효과적으로 디버그하려면 어떻게해야합니까? Mar 18, 2025 pm 03:16 PM

이 기사는 브라우저 개발자 도구를 사용하여 효과적인 JavaScript 디버깅, 중단 점 설정, 콘솔 사용 및 성능 분석에 중점을 둡니다.

Java의 컬렉션 프레임 워크를 효과적으로 사용하려면 어떻게해야합니까? Java의 컬렉션 프레임 워크를 효과적으로 사용하려면 어떻게해야합니까? Mar 13, 2025 pm 12:28 PM

이 기사는 Java의 컬렉션 프레임 워크의 효과적인 사용을 탐구합니다. 데이터 구조, 성능 요구 및 스레드 안전을 기반으로 적절한 컬렉션 (목록, 세트, ​​맵, 큐)을 선택하는 것을 강조합니다. 효율적인 수집 사용을 최적화합니다

소스 맵을 사용하여 조정 된 JavaScript 코드를 디버그하는 방법은 무엇입니까? 소스 맵을 사용하여 조정 된 JavaScript 코드를 디버그하는 방법은 무엇입니까? Mar 18, 2025 pm 03:17 PM

이 기사는 소스 맵을 사용하여 원래 코드에 다시 매핑하여 미니어링 된 JavaScript를 디버그하는 방법을 설명합니다. 소스 맵 활성화, 브레이크 포인트 설정 및 Chrome Devtools 및 Webpack과 같은 도구 사용에 대해 설명합니다.

Chart.js : Pie, Donut 및 Bubble Charts를 시작합니다 Chart.js : Pie, Donut 및 Bubble Charts를 시작합니다 Mar 15, 2025 am 09:19 AM

이 튜토리얼은 Chart.js를 사용하여 파이, 링 및 버블 차트를 만드는 방법을 설명합니다. 이전에는 차트 유형의 차트 유형을 배웠습니다. JS : 라인 차트 및 막대 차트 (자습서 2)와 레이더 차트 및 극지 지역 차트 (자습서 3)를 배웠습니다. 파이 및 링 차트를 만듭니다 파이 차트와 링 차트는 다른 부분으로 나뉘어 진 전체의 비율을 보여주는 데 이상적입니다. 예를 들어, 파이 차트는 사파리에서 남성 사자, 여성 사자 및 젊은 사자의 비율 또는 선거에서 다른 후보자가받는 투표율을 보여주는 데 사용될 수 있습니다. 파이 차트는 단일 매개 변수 또는 데이터 세트를 비교하는 데만 적합합니다. 파이 차트의 팬 각도는 데이터 포인트의 숫자 크기에 의존하기 때문에 원형 차트는 값이 0 인 엔티티를 그릴 수 없습니다. 이것은 비율이 0 인 모든 엔티티를 의미합니다

누가 더 많은 파이썬이나 자바 스크립트를 지불합니까? 누가 더 많은 파이썬이나 자바 스크립트를 지불합니까? Apr 04, 2025 am 12:09 AM

기술 및 산업 요구에 따라 Python 및 JavaScript 개발자에 대한 절대 급여는 없습니다. 1. 파이썬은 데이터 과학 및 기계 학습에서 더 많은 비용을 지불 할 수 있습니다. 2. JavaScript는 프론트 엔드 및 풀 스택 개발에 큰 수요가 있으며 급여도 상당합니다. 3. 영향 요인에는 경험, 지리적 위치, 회사 규모 및 특정 기술이 포함됩니다.

See all articles