
간단하게 이미지 압축을 위한 라이브러리 입니다.
이 라이브러리를 사용하면 서버에 이미지를 업로드 하기 전에 해상도나 저장 용랼을 줄여 서버에 부담을 줄일 수 있습니다.
browser-image-compression 은 이미지 압축을 위해 웹 브라우저에서 실행되는 javascript 모듈입니다.
공식 홈페이지에서는 이미지를 서버에 업로드하기 전에 해상도나 혹은 크기를 줄여 jpeg, png, webp 및 bmp 이미지를
압축하는 데 이 모듈을 사용할 수 있다고 설명하고 있습니다.
설치
npm i browser-image-compression
import imageCompression from "browser-image-compression";
기본 옵션
const options: Options = {
maxSizeMB: number,
maxWidthOrHeight: number,
onProgress: Function, // 선택사항
useWebWorker: boolean, // 선택사항
libURL: string, // 선택사항
preserveExif: boolean, // 선택사항
signal: AbortSignal, // 선택사항
// following options are for advanced users
maxIteration: number, // 선택사항
exifOrientation: number, // 선택사항
fileType: string, // 선택사항
initialQuality: number, // 선택사항
alwaysKeepResolution: boolean // 선택사항
}
maxSizeMB , maxWidthOrHeight 는 필수적으로 들어가야 하는 옵션입니다.
maxSizeMB 는 저장할 이미지의 최대 허용 용량을 정해줍니다.
maxWidthOrHeight 는 옵션을 설정하면 이미지의 최대 너비 또는 높이를 지정할 수 있습니다.

사용법
import imageCompression from "browser-image-compression";
const uploadFile = async (event) => {
const files = e.target.files;
const options = {
maxSizeMB: 0.5, // 허용하는 최대 사이즈 지정
maxWidthOrHeight: 1024, // 허용하는 최대 width, height 값 지정
useWebWorker: true // webworker 사용 여부
}
try {
const compressionFiles = await imageCompression(files, options);
....
}
imageCompression 은 기본적으로 비동기로 동작합니다 따라서 사용할때 꼭 async or await 을 사용하셔야 합니다.

compressionFiles 를 console.log 로 찍어보면 파일 크기가 줄어든 것을 확인하실 수 있습니다.
imageCompression 모듈을 이용하면 크기를 줄인 파일을 Blob 형태로 리턴해 주고 있습니다. 만약 진행하고 있는 프로젝트가 File 타입을 사용한다면 바꾸어 주어야 하겠죠??
const getImgUpload = async (image: File) => {
const resizingBlob = await imageCompression(image, options);
const resizingFile = new File([resizingBlob], image.name, { type: image.type });
return resizingFile;
};
여기서 또 이미지의 이름과 jpeg 같은 형식을 바꾸고 싶다면 아래와 같이 바꾸시면 됩니다.
const getImgUpload = async (image: File) => {
const resizingBlob = await imageCompression(image, options);
const resizingFile = new File([resizingBlob], "chan.jpeg", { type: "image/jpeg" });
return resizingFile;
};
'라이브러리' 카테고리의 다른 글
| React Intersection Observer (0) | 2024.08.20 |
|---|---|
| React hook form (0) | 2024.07.26 |
| React 에서 emtion 사용하기 (1) | 2024.07.09 |
| React 에서 gsap 사용하기 (0) | 2024.07.03 |
| React 에서 AOS 사용하는 방법 (1) | 2024.05.18 |