npm browser-image-compression패키지를 사용하여 이미지 사이즈를 줄이는 방법
1. browser-image-compression install
npm i browser-image-compression
2. 모듈 import
import imageCompression from 'browser-image-compression';
3. 컴포넌트 작성
file을 입력받을 input태그와 이미지를 미리보기 할 img태그 생성
*이미지 미리보기는 이전글 참고 - React | 이미지 업로드 후 미리보기 (on Change / image preview)
입력받은 파일을 담을 file state와 미리보기를 위한 fileUrl state도 생성
import React, {useState, useEffect} from 'react';
import imageCompression from 'browser-image-compression';
function ProfileModify () {
const [file, setFile] = useState(null);
const [fileUrl, setFileUrl] = useState("");
return (
<>
<input type='file' accept='image/jpg,image/png,image/jpeg,image/gif'
id='profile_img_upload' onChange={handleFileOnChange}
/>
<label for='profile_img_upload'>
<img src={camera} alt="camera" />
</label>
<img className="top_bar_profile_img" src={fileUrl} alt="profile_img" />
</>
)
}
4. resize를 위한 함수 작성
const handleFileOnChange = async (e) => {
let file = e.target.files[0]; // 입력받은 file객체
// 이미지 resize 옵션 설정 (최대 width을 100px로 지정)
const options = {
maxSizeMB: 2,
maxWidthOrHeight: 100
}
try {
const compressedFile = await imageCompression(file, options);
setFile(compressedFile);
// resize된 이미지의 url을 받아 fileUrl에 저장
const promise = imageCompression.getDataUrlFromFile(compressedFile);
promise.then(result => {
setFileUrl(result);
})
} catch (error) {
console.log(error);
}
}
+ 참고
'STUDY > React' 카테고리의 다른 글
React | icon 변경 (0) | 2020.09.29 |
---|---|
React | 이미지 onError처리 (img onError) (0) | 2020.09.21 |
React | id저장하기 (react-cookie) (0) | 2020.09.15 |
React | 다음 우편번호 검색 서비스 (react-daum-postcode) (0) | 2020.09.14 |
React | react-paginate로 빠르게 페이지네이션 구현하기 (0) | 2020.09.14 |