[javascript] Cropper.js를 사용하여 이미지에 파도 효과 추가하기

이미지 편집 및 처리는 웹 개발에서 자주 사용되는 기능 중 하나입니다. Cropper.js는 사용자가 이미지를 자르고 크롭하는 기능을 쉽게 추가할 수 있는 JavaScript 라이브러리입니다. 이번 튜토리얼에서는 Cropper.js를 사용하여 이미지에 파도 효과를 추가하는 방법에 대해 알아보겠습니다.

1. Cropper.js 설치 및 설정

먼저 Cropper.js를 설치해야 합니다. 아래 명령을 사용하여 npm을 통해 Cropper.js를 설치할 수 있습니다.

npm install cropperjs

설치가 완료되면 HTML 파일에 다음과 같이 스타일시트와 스크립트를 추가합니다.

<link rel="stylesheet" href="path/to/cropper.css">
<script src="path/to/cropper.js"></script>

2. 이미지와 Cropper 컨테이너 추가

이제 이미지와 Cropper 컨테이너를 HTML 파일에 추가해야 합니다. 다음과 같이 <img> 요소와 <div> 요소로 구성된 컨테이너를 생성합니다.

<img src="path/to/image.jpg" id="image">
<div id="cropper-container"></div>

3. JavaScript 코드 작성

이제 파도 효과를 추가하기 위해 JavaScript 코드를 작성해보겠습니다. 아래 코드를 참고하여 작성해주세요.

// 이미지 엘리먼트와 Cropper 컨테이너 엘리먼트 선택
var image = document.getElementById('image');
var cropperContainer = document.getElementById('cropper-container');

// Cropper 인스턴스 생성
var cropper = new Cropper(image, {
  aspectRatio: 16 / 9, // 파도 효과의 가로 세로 비율 설정
  viewMode: 3, // 이미지가 Cropper 컨테이너를 초과하는 경우 자동 조절
  cropBoxResizable: false, // 크롭 박스 크기 조절 비활성화
  crop: function (event) {
    // 파도 효과 적용 로직 작성
    // event.detail.x, event.detail.y, event.detail.width, event.detail.height 등 사용 가능한 속성들이 있습니다.
  }
});

위 코드에서 aspectRatio는 생성되는 크롭 박스의 가로 세로 비율을 설정하며, viewMode는 이미지가 Cropper 컨테이너를 초과할 경우 자동으로 조정하는 모드를 설정합니다. cropBoxResizable은 크롭 박스의 크기 조절을 비활성화하는 옵션입니다. crop 이벤트에서는 파도 효과를 적용할 수 있는 로직을 작성하면 됩니다.

4. 파도 효과 적용

파도 효과를 추가하기 위해서는 crop 이벤트에서 이미지를 조작해야 합니다. Cropper.js에서는 ctx.canvas을 통해 이미지를 조작할 수 있습니다. 아래 코드는 파도 효과를 적용하는 예시입니다.

// crop 이벤트 핸들러 내부에 추가
var canvas = cropperContainer.querySelector('.cropper-canvas');

canvas.style.filter = 'contrast(0.8) brightness(1.2) hue-rotate(45deg)';

// 추가적인 스타일 적용 가능
// canvas.style.transform = 'rotate(10deg)';

위 코드에서는 canvas.style.filter 속성을 사용하여 이미지에 다양한 필터를 적용할 수 있습니다. 여기에서는 대비, 밝기, 색상을 조정하는 필터를 사용했습니다. 필요에 따라 canvas.style.transform 속성을 사용하여 이미지를 회전시킬 수도 있습니다.

5. 정리

이제 Cropper.js를 사용하여 이미지에 파도 효과를 추가하는 방법에 대해 알아보았습니다. Cropper.js는 이미지 편집에 유용한 기능을 제공하는 강력한 라이브러리입니다. 참고 자료를 통해 더 많은 기능과 옵션을 알아볼 수 있습니다.

참고 자료