본문 바로가기

jsp

이미지 업로드 및 리사이징: 이미지 업로드 후 리사이징하여 저장하는 방법을 학습하는 예제.

반응형

이미지 업로드 및 리사이징은 사용자가 이미지를 웹 사이트에 업로드하고, 서버에서 해당 이미지의 크기를 조정한 후 저장하는 과정을 말합니다. 이 기능은 서버의 공간을 효율적으로 사용하고, 웹페이지의 로딩 속도를 향상시키는 데 도움이 됩니다. 이미지를 리사이징하는 것은 특히 모바일 디바이스나 다양한 화면 크기를 지원하는 반응형 웹 디자인에서 중요합니다. 다음은 이미지 업로드와 리사이징을 구현하는 두 가지 예제입니다.

예제 1: 이미지 업로드 및 서버에서 리사이징

이 예제에서는 사용자가 이미지를 업로드하고, 서버 측에서 이미지를 리사이징하여 저장하는 기능을 구현합니다. 이 예제에서는 Java의 BufferedImage와 ImageIO 클래스를 사용합니다.

uploadAndResizeImage.jsp

<%@ page import="java.io.*,java.awt.image.*,javax.imageio.*"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Upload and Resize Image</title>
</head>
<body>
<form action="uploadAndResizeHandler.jsp" method="post" enctype="multipart/form-data">
    Select image to upload and resize:
    <input type="file" name="image">
    <input type="submit" value="Upload Image">
</form>
</body>
</html>

uploadAndResizeHandler.jsp

<%@ page import="java.io.*,java.awt.Image.*,java.awt.image.*,javax.imageio.*,org.apache.commons.fileupload.*,org.apache.commons.fileupload.disk.*,org.apache.commons.fileupload.servlet.*"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    // Check for file upload request
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);

    if (isMultipart) {
        // Create a factory for disk-based file items
        DiskFileItemFactory factory = new DiskFileItemFactory();

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);

        try {
            // Parse the request to get file items
            List<FileItem> items = upload.parseRequest(request);

            for (FileItem item : items) {
                if (!item.isFormField()) {
                    // Process the uploaded file
                    String fileName = new File(item.getName()).getName();
                    InputStream fileContent = item.getInputStream();

                    // Read an image from the uploaded input stream
                    BufferedImage originalImage = ImageIO.read(fileContent);
                    int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();

                    // Set the dimensions for resizing
                    BufferedImage resizeImageJpg = resizeImage(originalImage, type);
                    ImageIO.write(resizeImageJpg, "jpg", new File("c:\\image\\" + fileName)); // Change the path accordingly

                    out.println("Image uploaded and resized successfully.");
                }
            }
        } catch (Exception ex) {
            out.println("Error: " + ex.getMessage());
        }
    }

    // Resize the image method
    private static BufferedImage resizeImage(BufferedImage originalImage, int type) {
        final int IMG_WIDTH = 200; // set width
        final int IMG_HEIGHT = 200; // set height
        BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
        Graphics2D g = resizedImage.createGraphics();
        g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
        g.dispose();
        return resizedImage;
    }
%>

관련 전문용어 설명

  • 이미지 리사이징(Image Resizing): 이미지의 크기를 조정하는 과정입니다. 일반적으로 너비와 높이를 변경하여 수행됩니다.
  • 멀티파트(Multipart): 웹 폼에서 파일을 전송할 때 사용되는 인코딩 유형입니다. 멀티파트 인코딩을 사용하면 사용자는 파일과 텍스트 필드를 포함한 데이터를 서버로 전송할 수 있습니다.
  • BufferedImage: Java에서 이미지 데이터를 다루는 데 사용되는 클래스입니다. 이미지를 조작하고 처리하는 데 사용됩니다.
반응형