์ฌ์ฉ์๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋ฑ๋กํ๋ ๊ณผ์ ์์ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์์ถํ ์ ์๋ค๋ฉด, ์ฑ๋ฅ์ ์ต์ ํ ์ํค๋ ๊ณผ์ ์ค ํ๋๊ฐ ๋์ง ์์๊น? ํ๋ ์๊ฐ์ ์ฌ์ฉํ๊ฒ ๋์๋ค.
broser-image-compression์ ์ด๋ฏธ์ง ์์ถ์ ์ํด ์น ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ javascript ๋ชจ๋์ด๋ค. ์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ๋ง์๊ณ , ์ ๋ณด๊ฐ ๋ง์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๊ฒ ๋์๋ค.
์ฌ์ฉ๋ฒ์ ์ด๋ ต์ง ์๋ค. ์ฐ์ , ๊ณต์ ์ฌ์ดํธ์ ์๋ ์ฝ๋๋ฅผ ๋ฐ๋ผ๊ฐ๋ณด์!
// ์ฌ์ฉ์๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋ฑ๋กํ๋ input ์ปดํฌ๋ํธ
<input type="file" accept="image/*" onchange="handleImageUpload(event);">
// input ์ปดํฌ๋ํธ์ onChange์ ๋ฑ๋ก๋ ํจ์ ๋ง๋ค๊ธฐ โญ
async function handleImageUpload(event) {
const imageFile = event.target.files[0];
console.log('originalFile instanceof Blob', imageFile instanceof Blob); // true // blob ํ์ผ์ธ์ง ํ์ธ
console.log(`originalFile size ${imageFile.size / 1024 / 1024} MB`); // ์ด๋ฏธ์ง ํ์ผ์ ํฌ๊ธฐ๋ฅผ ๋ฉ๊ฐ๋ฐ์ดํธ ๋จ์๋ก ๋ก๊ทธ์ ์ถ๋ ฅ
// ์ต์
์ค์
const options = {
maxSizeMB: 1, // ์์ถ ํ์ ์ต๋ ํ์ผ ํฌ๊ธฐ
maxWidthOrHeight: 1920, // ์ด๋ฏธ์ง์ ์ต๋ ๋๋น ๋๋ ๋์ด
useWebWorker: true, // ์น ์์ปค๋ฅผ ์ฌ์ฉํด ์ด๋ฏธ์ง ์์ถ์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ (true์ผ ๊ฒฝ์ฐ)
}
try {
const compressedFile = await imageCompression(imageFile, options);
// imageCompression์ ํธ์ถํด ์ด๋ฏธ ์์ถ, ์์ถ๋ ์ด๋ฏธ์ง ํ์ผ ๋ฐํ -> compressedFile์ ๋ฃ์ด์ค
console.log('compressedFile instanceof Blob', compressedFile instanceof Blob); // true
console.log(`compressedFile size ${compressedFile.size / 1024 / 1024} MB`); // smaller than maxSizeMB
await uploadToServer(compressedFile); // uploadToServer๋ ๊ฐ ์ฌ์ฉ์๋ค์ด ์
๋ก๋ ํ๋ ํจ์ ๋ก์ง์ด๋ค.
} catch (error) {
console.log(error);
}
}
const onChangeImage = async e => {
const files = e.target.files;
const updatedImages = [...imageArr];
const updatedDBImages = [...imageDBArr];
const options = {
maxSizeMB: 1,
maxWidthOrHeight: 1920,
useWebWorker: true,
};
for (let i = 0; i < files.length; i++) {
const file = files[i];
try {
const compressedFile = await imageCompression(file, options);
// ๊ณต์ ๋ฌธ์๋ก ์น๋ฉด, uploadToServer์ ๊ฐ์ ์ญํ ์ ํ๋
await updatedImages.push(URL.createObjectURL(compressedFile)); // ๋ฏธ๋ฆฌ๋ณด๊ธฐ
await updatedDBImages.push(compressedFile); // DB์ฉ
console.log(compressedFile);
} catch (error) {
console.log(error);
}
}
setImageArr(updatedImages.slice(0, 5));
setImageDBArr(updatedDBImages.slice(0, 5));
};
์ด๋ฏธ์ง ์
๋ก๋ ์ฉ๋์ ์ ํํ๊ณ ์๋ ๊ณณ์์ ์ฌ์ฉํ๋ฉด ๋ ์ข์ ํจ๊ณผ๋ฅผ ๋ณผ ๊ฒ์ด๋ผ ์๊ฐํ๋ค.โจ