JavaScript의 캔버스를 사용하여 마스크된 이미지에 사용자 정의 테두리를 추가하는 방법

JavaScript의 캔버스를 사용하여 마스크된 이미지에 사용자 정의 테두리를 추가하는 방법
JavaScript의 캔버스를 사용하여 마스크된 이미지에 사용자 정의 테두리를 추가하는 방법

JavaScript Canvas에서 마스크된 이미지 테두리 마스터하기

다중 그림 융합은 JavaScript 시각 효과 생성의 일반적인 단계입니다. 마스크를 사용하여 이미지의 볼 수 있는 영역을 정의하는 것은 자주 사용되는 기술입니다. 이는 고유한 양식을 만드는 데 도움이 되지만 마스크된 모양 주위에 테두리를 추가하는 것은 어려울 수 있습니다. 비록 캔버스 JavaScript의 요소는 광범위한 이미지 조작을 제공하므로 마스크된 이미지 주위의 테두리를 조정하는 것은 쉽지 않습니다.

개발자는 다음을 사용하여 상상적인 방식으로 마스크를 적용하고 그림을 클립할 수 있습니다. 캔버스 API, 기본적으로 생성된 모든 테두리는 캔버스의 직사각형 모양과 일치하는 경향이 있습니다. 마스크로 정의된 복잡한 모양의 가장자리와 일치하는 테두리를 만들려는 경우 문제가 발생합니다. 목표는 직선적인 직사각형 테두리를 넘어 마스크의 정확한 여정을 추적하는 것입니다.

이 게시물에서는 JavaScript에서 이미지 마스크를 적용하는 방법과 더 중요하게 마스크된 그림의 뚜렷한 모양이 테두리로 둘러싸여 있는지 확인하는 방법을 설명합니다. 또한 마스킹을 완료하지만 아직 정의된 경계 솔루션이 없는 기능을 살펴보겠습니다.

캔버스에서 복합 작업을 수행하는 방법을 배워 테두리의 모양을 미세 조정할 수 있습니다. 먼저 JavaScript의 캔버스 기능을 사용하여 마스크된 이미지 주위에 필요한 테두리를 추가하는 방법을 살펴보겠습니다.

명령 사용예
globalCompositeOperation 캔버스에서의 그리기 동작 구성은 이 기능으로 정의됩니다. 예제의 globalCompositeOperation ='source-in'은 교차하는 영역만 보이도록 마스크 이미지가 기본 그림을 자르도록 합니다.
toDataURL() 캔버스의 정보를 Base64로 인코딩된 이미지로 변환합니다. 이렇게 하면 마스크와 테두리를 적용한 후 완성된 이미지를 PNG로 활용할 수 있습니다. 예제의 이미지 출력은 canvas.toDataURL('image/png')을 사용하여 생성됩니다.
crossOrigin 이 기능은 캔버스의 다른 도메인에서 로드된 그림을 사용할 수 있도록 하여 보안 제한을 준수합니다. MaskImg.crossOrigin = 'anonymous'는 CORS 문제를 일으키지 않고 마스크 이미지에 액세스할 수 있음을 보장합니다.
beginPath() 캔버스에서 이 방법을 사용하여 새 경로를 시작할 수 있습니다. 두 번째 메서드는 ctx.beginPath()를 호출하여 마스크된 이미지 주위에 사용자 정의 테두리를 그릴 때 경로가 마스크의 윤곽선을 준수하는지 확인합니다.
moveTo() 이 절차를 사용하면 도면이 작성되지 않습니다. 대신 "펜"이 새로운 시작 위치로 이동됩니다. 테두리의 시작점은 마스크 경계 주위에 테두리를 정확하게 그리는 데 필수적인 ctx.moveTo(0, 0)를 사용하여 예제에서 배치됩니다.
lineTo() 주어진 좌표를 시작점으로 사용하여 직선을 그리는 기술입니다. 마스크된 이미지의 테두리는 ctx.lineTo(maskImg.width, 0)를 사용하여 솔루션에 그려진 선으로 정의됩니다.
stroke() 지정된 경로를 따라 테두리나 선을 그립니다. 예를 들어 moveTo() 및 lineTo()를 사용하여 마스크 형태를 정의한 다음 ctx.strok()을 사용하여 마스크된 이미지 주위에 테두리를 적용합니다.
lineWidth 캔버스에 칠해지는 선의 두께를 결정합니다. 스크립트는 ctx.lineWidth = 5를 사용하여 마스크 모양 주위에 5픽셀 두께의 테두리를 설정합니다.
strokeStyle 테두리의 색상이나 스타일을 나타냅니다. 예제의 테두리 색상은 ctx.StrokeStyle ='red'를 사용하여 빨간색으로 설정되었습니다.

마스크된 이미지에 테두리를 적용하는 방법 인식

제공되는 스크립트의 목적은 다른 그림을 하나의 이미지에 대한 마스크로 사용한 다음 캔버스 API 마스크된 모양 주위에 사용자 정의 테두리를 추가합니다. 마스크와 기본 이미지에 대한 함수 시작 시 두 개의 새로운 이미지 객체가 생성됩니다. 외부 소스에서 사진을 로드할 때 CORS로 인한 문제를 방지하려면 교차 원본 설정이 필수적입니다. 두 이미지가 모두 로드되면 캔버스가 형성되고 그 비율이 마스크 이미지와 일치하도록 조정됩니다. 이렇게 하면 이미지를 그리는 동안 크기 조정 문제가 방지되고 캔버스가 적절한 영역에서 작업할 수 있도록 준비됩니다.

그런 다음 스크립트는 그리기이미지() 마스크 이미지를 캔버스에 그리는 기능입니다. 이렇게 하면 마스크가 캔버스에 적용되어 마스킹 절차의 기초 레이어 역할을 합니다. 마스크를 올바르게 적용하려면 전역 복합 작업을 "소스 입력"으로 설정해야 합니다. 캔버스는 마스크 이미지와 일치하는 기본 그림의 영역만 유지하도록 지시됩니다. 본질적으로 마스크는 기본 이미지가 잘리는 모양을 정의합니다. 이 클리핑 영역 내에 기본 그림이 그려지면 합성 작업이 "소스 오버"로 재설정되어 이전에 클리핑한 콘텐츠에 영향을 주지 않고 테두리 페인팅과 같은 추가 작업이 가능해집니다.

마스크된 모양에 테두리를 적용하려면 뇌졸중() 기술. 이 명령은 캔버스에 지정된 경로나 양식을 표시합니다. 두 번째 솔루션에서는 moveTo() 및 lineTo()를 결합하여 캔버스 경로를 수동으로 생성하고 마스크의 테두리를 추적합니다. 이러한 기술을 사용하면 테두리의 모양을 수동으로 지정하고 직사각형 캔버스 경계가 아닌 마스크의 모양을 준수하는지 확인할 수 있습니다. 테두리의 모양을 완벽하게 제어할 수 있습니다. 선폭 속성은 테두리의 두께와 스트로크스타일 속성은 색상을 설정합니다.

마지막으로 toDataURL() 함수는 캔버스를 Base64 문자열로 변환하는 데 사용됩니다. 이를 통해 완성된 이미지(마스크와 테두리 포함)는 프로그램의 다른 영역에서 쉽게 활용하거나 서버에 업로드할 수 있는 형식으로 변환됩니다. 타이밍 실수를 피하기 위해 Promise에서는 두 그림이 모두 완전히 로드된 경우에만 이 작업이 종료되도록 합니다. 이 스크립트는 마스크의 윤곽선과 정확하게 일치하는 동적 테두리 적용 및 마스킹을 포함한 정교한 이미지 수정 기술이 JavaScript의 캔버스 요소를 사용하여 어떻게 수행될 수 있는지 보여줍니다.

방법 1: 캔버스 및 획 방법을 사용하여 마스크된 이미지에 사용자 정의 테두리 추가

마스크된 이미지 주위에 테두리를 만들기 위해 이 접근 방식은 JavaScript와 Canvas API를 사용합니다. Stroke()는 마스크된 모양의 윤곽을 그리는 데 사용됩니다.

function applyFiltersAndConvertToBase64(imageUrl, materialImage) {
    return new Promise((resolve, reject) => {
        const maskImg = new Image();
        const mainImg = new Image();
        maskImg.crossOrigin = "anonymous";
        mainImg.crossOrigin = "anonymous";
        let imagesLoaded = 0;
        const onLoad = () => {
            imagesLoaded++;
            if (imagesLoaded === 2) {
                const canvas = document.createElement('canvas');
                const ctx = canvas.getContext('2d');
                canvas.width = maskImg.width;
                canvas.height = maskImg.height;
                ctx.drawImage(maskImg, 0, 0);
                ctx.globalCompositeOperation = 'source-in';
                ctx.drawImage(mainImg, 0, 0, maskImg.width, maskImg.height);
                ctx.globalCompositeOperation = 'source-over';
                ctx.lineWidth = 5; // Border thickness
                ctx.strokeStyle = 'red'; // Border color
                ctx.stroke(); // Draw border around mask
                const base64Image = canvas.toDataURL('image/png');
                resolve(base64Image);
            }
        };
        maskImg.onload = onLoad;
        mainImg.onload = onLoad;
        maskImg.onerror = reject;
        mainImg.onerror = reject;
        maskImg.src = imageUrl;
        mainImg.src = materialImage;
    });
}

옵션 2: 캔버스 경로를 사용하여 마스크 모양 주위에 사용자 정의 테두리 만들기

이 방법은 JavaScript와 Canvas API를 사용하여 이미지 마스크 경로를 따라 테두리가 마스크된 모양을 밀접하게 따르도록 합니다.

function applyFiltersAndConvertToBase64(imageUrl, materialImage) {
    return new Promise((resolve, reject) => {
        const maskImg = new Image();
        const mainImg = new Image();
        maskImg.crossOrigin = "anonymous";
        mainImg.crossOrigin = "anonymous";
        let imagesLoaded = 0;
        const onLoad = () => {
            imagesLoaded++;
            if (imagesLoaded === 2) {
                const canvas = document.createElement('canvas');
                const ctx = canvas.getContext('2d');
                canvas.width = maskImg.width;
                canvas.height = maskImg.height;
                ctx.drawImage(maskImg, 0, 0);
                ctx.globalCompositeOperation = 'source-in';
                ctx.drawImage(mainImg, 0, 0, maskImg.width, maskImg.height);
                ctx.globalCompositeOperation = 'source-over';
                // Create path for the mask shape
                ctx.beginPath();
                ctx.moveTo(0, 0);
                ctx.lineTo(maskImg.width, 0);
                ctx.lineTo(maskImg.width, maskImg.height);
                ctx.lineTo(0, maskImg.height);
                ctx.closePath();
                ctx.lineWidth = 5; // Border thickness
                ctx.strokeStyle = 'blue'; // Border color
                ctx.stroke(); // Apply the border along the path
                const base64Image = canvas.toDataURL('image/png');
                resolve(base64Image);
            }
        };
        maskImg.onload = onLoad;
        mainImg.onload = onLoad;
        maskImg.onerror = reject;
        mainImg.onerror = reject;
        maskImg.src = imageUrl;
        mainImg.src = materialImage;
    });
}

JavaScript에서 사용자 정의 테두리를 사용하여 마스크된 이미지 향상

JavaScript 애플리케이션의 사용자 경험은 이미지를 마스크하고 사용자 정의 테두리를 설정하는 기능을 통해 크게 향상될 수 있습니다. 캔버스 API. 마스킹을 사용하면 마스크라고 알려진 다른 이미지에 따라 이미지의 어느 영역이 표시되는지 결정할 수 있습니다. 마스크된 영역 주위에 테두리를 추가하는 것은 많은 개발자가 직면하는 문제이며, 특히 마스크가 단순한 직사각형 모양이 아닐 때 더욱 그렇습니다. 마스크의 윤곽선과 정확히 일치하는 테두리가 있는 프로젝트는 더욱 세련되고 전문적으로 보입니다.

이 문제에 대한 유용한 해결책은 Canvas API를 사용하는 것입니다. Path2D 물체. Path2D를 사용하여 마스크 윤곽에 맞는 복잡한 경로를 디자인한 다음 테두리로 둘러쌀 수 있습니다. 이 방법을 사용하면 기존 직사각형을 뛰어넘어 사용자 정의 마스크의 모서리와 정확하게 일치하는 테두리를 생성할 수 있습니다. 사용 moveTo() 그리고 lineTo() 함께 사용하면 마스크의 윤곽선을 더 쉽게 추적할 수 있고 정확하게 정렬된 테두리를 보장할 수 있습니다.

성능은 고려해야 할 또 다른 중요한 요소입니다. 특히 큰 이미지로 작업하거나 실시간으로 테두리를 동적으로 적용할 때 더욱 그렇습니다. 마스크된 그림 캐싱, 그리기 작업 감소, 캔버스 렌더링 프로세스 간소화와 같은 전략을 사용하면 애플리케이션 속도를 향상시킬 수 있습니다. 복잡한 설정이나 고성능 설정에서도 무의미한 작업을 줄여 마스킹 및 테두리 그리기 과정을 원활하게 진행할 수 있습니다.

캔버스를 사용한 이미지 마스킹 및 경계 지정에 대해 자주 묻는 질문

  1. JavaScript에서 다른 이미지를 사용하여 이미지를 마스킹하려면 어떻게 해야 합니까?
  2. 사용 2 로 설정 'source-in', 이미지를 마스크하기 위해 캔버스에 마스크를 그립니다. 캔버스 API. 마스크를 일치시키기 위해 기본 이미지가 잘립니다.
  3. 모양에 맞는 마스크된 이미지에 테두리를 어떻게 만들 수 있습니까?
  4. 마스크의 경로를 설정한 후 moveTo() 그리고 lineTo(), 사용 stroke() 기술. 이렇게 하면 마스크 모양을 개인화된 테두리로 둘러쌀 수 있습니다.
  5. 목적은 무엇입니까? toDataURL() 캔버스 조작에?
  6. 캔버스의 내용은 다음을 통해 Base64로 인코딩된 이미지로 변환됩니다. toDataURL() 기능을 사용하여 PNG 이미지로 사용하거나 배포하기가 쉽습니다.
  7. 성능을 위해 캔버스 작업을 최적화하려면 어떻게 해야 합니까?
  8. 그리기 작업의 양을 줄이고 일반적으로 사용되는 요소를 저장하여 캔버스 속도를 최대화하는 방법을 생각해 보세요. 이렇게 하면 애플리케이션이 원활하게 작동하고 다시 그리는 횟수가 줄어듭니다.
  9. 캔버스에 원본 간 이미지를 로드할 수 있나요?
  10. 예, 하지만 CORS 문제를 일으키지 않고 이미지를 사용할 수 있게 하려면 다음을 설정해야 합니다. crossOrigin 재산 'anonymous'.

마스킹 및 테두리에 대한 최종 생각

JavaScript 앱에서 캔버스에 이미지를 마스킹하고 사용자 정의 테두리를 적용하는 것은 세련된 시각적 요소를 만드는 효과적인 방법입니다. 개발자는 다음을 활용하여 그림의 렌더링 및 스타일을 조작할 수 있습니다. 캔버스 API 다음과 같은 정교한 그리기 명령이 포함됩니다. 뇌졸중() 및 경로 정의.

특히 대형 사진의 경우 테두리 및 마스킹 작업을 신중하게 최적화하여 원활한 성능이 보장됩니다. 이 튜토리얼은 직사각형이 아닌 이미지 주위에 테두리를 동적으로 그리는 유용한 방법을 제공합니다. 이는 미학적으로 만족스럽고 반응이 빠른 온라인 앱을 개발할 때 유용합니다.

캔버스의 마스킹 및 테두리 기술에 대한 참고 자료
  1. 자세한 이용안내 캔버스 API 다음과 같은 그리기 작업을 포함하여 이미지와 마스크를 조작합니다. 4 그리고 2: MDN 웹 문서 .
  2. JavaScript에서 이미지 마스킹을 적용하고 교차 출처 리소스를 처리하는 방법에 대한 포괄적인 설명: HTML5 캔버스 튜토리얼 .
  3. 이미지 렌더링 및 그리기 작업 최적화에 중점을 둔 캔버스 기반 애플리케이션에 대한 성능 팁: 스매싱 매거진 .