Java·Î À̹ÌÁöÀÇ ¿ë·®À» ÁÙÀ̱â À§Çؼ´Â À̹ÌÁöÀÇ Ç°Áú Á¶Á¤Çϰųª Çػ󵵸¦ °¨¼Ò½ÃÅ°´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. ´ÙÀ½Àº Java¿¡¼ À̹ÌÁö ¿ë·®À» ÁÙÀÌ´Â °£´ÜÇÑ ¹æ¹ýÀÔ´Ï´Ù.
Java ImageIO »ç¿ëÇϱâ: JavaÀÇ Ç¥ÁØ ¶óÀ̺귯¸®ÀÎ javax.imageio
¸¦ »ç¿ëÇÏ¿© À̹ÌÁö¸¦ Àаí Ç°ÁúÀ» Á¶Á¤ÇÏ¿© ÀúÀåÇÕ´Ï´Ù.
JPEG À̹ÌÁö Ç°Áú Á¶Á¤Çϱâ: À̹ÌÁöÀÇ Çü½ÄÀ» JPEG·Î º¯È¯ÇÏ¸é¼ Ç°ÁúÀ» ³·Ãß¸é ¿ë·®À» ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½Àº À̸¦ ±¸ÇöÇÑ ¿¹Á¦ ÄÚµåÀÔ´Ï´Ù:
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.event.ImageWriterEvent;
import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
import javax.imageio.stream.ImageOutputStream;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
public class ImageCompressor {
public static void main(String[] args) {
File inputFile = new File("input.jpg"); // ÀÔ·Â ÆÄÀÏ °æ·Î
File outputFile = new File("output.jpg"); // Ãâ·Â ÆÄÀÏ °æ·Î
try {
// À̹ÌÁö Àбâ
BufferedImage image = ImageIO.read(inputFile);
// À̹ÌÁö Writer ¾ò±â
Iterator writers = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = writers.next();
// À̹ÌÁö Ãâ·Â ½ºÆ®¸² »ý¼º
try (ImageOutputStream ios = ImageIO.createImageOutputStream(outputFile)) {
writer.setOutput(ios);
// JPEG Ç°Áú ¼³Á¤
JPEGImageWriteParam jpegParams = (JPEGImageWriteParam) writer.getDefaultImageWriteParam();
jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
jpegParams.setCompressionQuality(.7f); // .f ~ 1.f »çÀÌÀÇ °ª, .7Àº 70% Ç°Áú
// À̹ÌÁö ¾²±â
writer.write(null, new javax.imageio.IIOImage(image, null, null), jpegParams);
}
writer.dispose();
System.out.println("À̹ÌÁö ¿ë·® ÁÙÀ̱⠿Ϸá");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ÀÌ ÄÚµå´Â input.jpg
¶ó´Â À̹ÌÁö ÆÄÀÏÀ» Àоî output.jpg
·Î Ç°ÁúÀ» 70%·Î Á¶Á¤ÇÏ¿© ÀúÀåÇÕ´Ï´Ù. ¿©±â¼ setCompressionQuality
ÀÇ °ªÀ» Á¶Á¤Çϸé ÃÖÁ¾ À̹ÌÁöÀÇ Ç°ÁúÀ» º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ·± ºô¾î¸ÔÀ» ³ðÀÇ ¹°»ö¾ø´Â¼¼»ó!
Java¿¡¼ ÆÄÀÏÀ» ¾÷·ÎµåÇϱâ Àü¿¡ Å©±â¸¦ üũÇÏ·Á¸é, ÀϹÝÀûÀ¸·Î À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡¼´Â ÆÄÀϷε带 ó¸®ÇÏ´Â ¼ºí¸´ ÄÁÆ®·Ñ·¯¿¡¼ ÆÄÀÏÀÇ Å©±â¸¦ °ËÁõÇÕ´Ï´Ù. ¾Æ·¡´Â Spring Boot ¿¹Á¦¸¦ »ç¿ëÇÏ¿© ÆÄÀÏ ¾÷·Îµå Àü Å©±â üũ¸¦ ±¸ÇöÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.
pom.xml
¿¡ spring-boot-starter-web
°ú commons-fileupload
ÀÇÁ¸¼ºÀ» Ãß°¡ÇÕ´Ï´Ù.<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>commons-fileuploadgroupId>
<artifactId>commons-fileuploadartifactId>
<version>1.3.3version>
dependency>
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
public class FileUploadController {
// ÆÄÀÏ ÃÖ´ë Å©±â ¼³Á¤ (¿¹: 5MB)
private static final long MAX_FILE_SIZE = 5 * 1024 * 1024;
@PostMapping("/upload")
public ResponseEntity uploadFile(@RequestParam("file") MultipartFile file) {
// ÆÄÀÏ Å©±â üũ
if (file.getSize() > MAX_FILE_SIZE) {
return ResponseEntity.status(HttpStatus.PAYLOAD_TOO_LARGE)
.body("ÆÄÀÏ Å©±â°¡ ³Ê¹« Å®´Ï´Ù. ÃÖ´ë " + (MAX_FILE_SIZE / (1024 * 1024)) + "MB±îÁö Çã¿ëµË´Ï´Ù.");
}
// ÆÄÀÏ Ã³¸® ·ÎÁ÷ Ãß°¡
// ...
return ResponseEntity.ok("ÆÄÀÏ ¾÷·Îµå ¼º°ø");
}
}
MAX_FILE_SIZE
: ¾÷·ÎµåÇÒ ¼ö ÀÖ´Â ÃÖ´ë ÆÄÀÏ Å©±â¸¦ ¹ÙÀÌÆ® ´ÜÀ§·Î ¼³Á¤ÇÕ´Ï´Ù. À§ Äڵ忡¼´Â 5MB·Î ¼³Á¤Çß½À´Ï´Ù.@RequestParam
À» »ç¿ëÇÏ¿© ÆÄÀÏÀ» ¹Þ°í, file.getSize()
¸Þ¼µå¸¦ È£ÃâÇÏ¿© ÆÄÀÏÀÇ Å©±â¸¦ È®ÀÎÇÕ´Ï´Ù.¼¹ö Ãø»Ó ¾Æ´Ï¶ó Ŭ¶óÀ̾ðÆ® Ãø¿¡¼µµ ÆÄÀÏ Å©±â¸¦ üũÇÒ ¼ö ÀÖ½À´Ï´Ù. JavaScript¸¦ »ç¿ëÇÏ¿© ¾÷·ÎµåÇϱâ Àü¿¡ Ŭ¶óÀ̾ðÆ®¿¡¼ ÆÄÀÏ Å©±â¸¦ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
<input type="file" id="fileInput" />
<button onclick="uploadFile()">¾÷·ÎµåÇϱâbutton>
<script>
function uploadFile() {
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[];
// ÆÄÀÏ Å©±â üũ (5MB)
const MAX_FILE_SIZE = 5 * 1024 * 1024;
if (file.size > MAX_FILE_SIZE) {
alert('ÆÄÀÏ Å©±â°¡ ³Ê¹« Å®´Ï´Ù. ÃÖ´ë 5MB±îÁö Çã¿ëµË´Ï´Ù.');
return;
}
// ÆÄÀÏ ¾÷·Îµå ÄÚµå Ãß°¡ (AJAX µî)
}
script>
ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ¸é »ç¿ëÀÚ°¡ ÆÄÀÏ ¾÷·Îµå Àü¿¡ Å©±â¸¦ üũÇÒ ¼ö ÀÖ¾î ºÒÆíÇÔÀ» ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.
jQuery¸¦ »ç¿ëÇÏ¿© ÆÄÀÏ ¾÷·Îµå Àü¿¡ ÆÄÀÏ Å©±â¸¦ üũÇÏ´ÂÀ» ¼³¸íÇÏ°Ú½À´Ï´Ù. HTMLÀÇ ¿ä¼Ò¿Í jQuery »ç¿ëÇÏ¿© ÆÄÀÏÀÇ Å©±â¸¦ °ËÁõÇÏ´Â ±â´ÉÀ» ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="" content="width=device-width, initial-scale=1.">
<title>ÆÄÀÏ ¾÷·Îµå Å©±â üũtitle>
<script src="https://code.jquery.com/jquery-3.6..min.js">script>
head>
<body>
<input type="file" id="fileInput" />
<button id="uploadButton">¾÷·ÎµåÇϱâbutton>
<script>
$(document).ready(function() {
$('#uploadButton').on('click', function() {
const fileInput = $('#fileInput')[];
const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
// ÆÄÀÏÀÌ ¼±ÅõǾú´ÂÁö üũ
if (fileInput.files.length === ) {
alert('ÆÄÀÏÀ» ¼±ÅÃÇØÁÖ¼¼¿ä.');
return;
}
const file = fileInput.files[];
// ÆÄÀÏ Å©±â üũ
if (file.size > MAX_FILE_SIZE) {
alert('ÆÄÀÏ Å©±â°¡ ³Ê¹« Å®´Ï´Ù. ÃÖ´ë 5MB±îÁö Çã¿ëµË´Ï´Ù.');
return;
}
// ÆÄÀÏ ¾÷·Îµå ó¸® ·ÎÁ÷ Ãß°¡
alert('ÆÄÀÏ ¾÷·Îµå ÁøÇà Áß...');
// ¿©±â¼ ÆÄÀÏÀ» ¼¹ö·Î ¾÷·ÎµåÇÏ´Â ·ÎÁ÷À» Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.
});
});
script>
body>
html>
HTML ±¸Á¶:
¿ä¼Ò¿Í ¾÷·Îµå ¹öÆ°À» »ý¼ºÇß½À´Ï´Ù.jQuery »ç¿ë:
$(document).ready()
), ¾÷·Îµå ¹öÆ°¿¡ Ŭ¸¯ À̺¥Æ® ¸®½º³Ê¸¦ Ãß°¡ÇÕ´Ï´Ù.ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ¸é »ç¿ëÀÚ°¡ ÆÄÀÏÀ» ¾÷·ÎµåÇϱâ Àü¿¡ ÆÄÀÏ Å©±â¸¦ üũÇÒ ¼ö ÀÖ¾î ´õ ³ªÀº »ç¿ëÀÚ °æÇèÀ» Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù.