📷 JavaScript로 이미지 리사이징 후 PHP로 업로드하는 방법

2025. 4. 16. 11:44·Programing/javascript
반응형

웹에서 이미지를 업로드할 때, 용량이 큰 이미지를 서버에 바로 전송하면 속도도 느리고 서버 부담도 커지기 마련입니다.
그래서 프론트엔드에서 미리 이미지 사이즈를 줄이고(base64 또는 Blob 등으로) PHP 서버로 전송하면 효율적으로 처리할 수 있습니다.

이번 글에서는 JavaScript로 이미지 리사이징을 수행하고, PHP로 업로드하는 전체 과정을 예제와 함께 정리해보겠습니다.


✅ 전체 흐름 요약

  1. 사용자가 파일 선택
  2. JavaScript에서 이미지 리사이징 (canvas 사용)
  3. 리사이징된 이미지를 Blob 또는 Base64로 변환
  4. FormData에 담아 서버에 전송 (AJAX)
  5. PHP에서 업로드 처리

🧪 1. HTML - 파일 입력 필드 만들기

<input type="file" id="upload" accept="image/*" />
<button onclick="resizeAndUpload()">업로드</button>

🧪 2. JavaScript - 이미지 리사이징 코드

function resizeAndUpload() {
  const fileInput = document.getElementById('upload');
  const file = fileInput.files[0];
  if (!file) return alert('파일을 선택해주세요.');

  const img = new Image();
  const reader = new FileReader();

  reader.onload = function (e) {
    img.src = e.target.result;
  };

  img.onload = function () {
    const canvas = document.createElement('canvas');
    const MAX_WIDTH = 800;
    const scale = MAX_WIDTH / img.width;

    canvas.width = MAX_WIDTH;
    canvas.height = img.height * scale;

    const ctx = canvas.getContext('2d');
    ctx.drawImage(img, 0, 0, canvas.width, canvas.height);

    canvas.toBlob(function (blob) {
      const formData = new FormData();
      formData.append('image', blob, file.name);

      // 서버로 전송
      fetch('upload.php', {
        method: 'POST',
        body: formData
      })
        .then(res => res.text())
        .then(data => {
          alert('업로드 완료: ' + data);
        })
        .catch(err => {
          console.error(err);
          alert('업로드 실패');
        });
    }, file.type);
  };

  reader.readAsDataURL(file);
}

🧪 3. PHP - 업로드 처리 (upload.php)

<?php
if (isset($_FILES['image'])) {
    $uploadDir = 'uploads/';
    $filename = basename($_FILES['image']['name']);
    $uploadPath = $uploadDir . $filename;

    if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadPath)) {
        echo "파일 업로드 성공: $uploadPath";
    } else {
        echo "업로드 실패";
    }
} else {
    echo "이미지가 전송되지 않았습니다.";
}

📁 uploads/ 폴더는 웹서버 쓰기 권한이 있어야 합니다.


✅ 결과

  • 이미지 업로드 전 리사이징 처리로 서버 부하 감소
  • 사용자 입장에서도 업로드 속도 개선
  • Base64가 아닌 Blob 전송으로 성능도 OK

💡 팁: 이미지 리사이징 품질 조정

이미지 퀄리티를 조절하려면 canvas.toBlob() 대신 canvas.toDataURL('image/jpeg', 0.7) 처럼 압축률을 넣어도 됩니다.


마무리

프론트엔드에서 이미지 리사이징을 처리하면 UX 개선은 물론 서버 최적화에도 큰 도움이 됩니다.
특히 PHP로 백엔드를 운영 중이라면 위 방식으로 쉽게 구현할 수 있어요.

반응형

'Programing > javascript' 카테고리의 다른 글

자바스크립트의 Structural 패턴: 객체 구조의 유연함을 설계하다  (0) 2025.04.19
자바스크립트의 Creational 패턴: 객체 생성의 정석  (0) 2025.04.19
💻 숫자를 한글 숫자 표기로 변환  (1) 2025.04.18
💰 숫자를 한글로 금액 단위로 표현  (0) 2025.04.18
🎂 자바스크립트로 나이 계산하는 3가지 방법  (0) 2025.04.16
JavaScript로 URL 파라미터 업데이트하는 방법  (0) 2025.04.16
javascript array sort(나이순 정렬)  (0) 2023.09.19
jQuery 이름이 비슷한 여러 요소 한번에 선택(like selector for jquery)  (0) 2023.09.19
'Programing/javascript' 카테고리의 다른 글
  • 💻 숫자를 한글 숫자 표기로 변환
  • 💰 숫자를 한글로 금액 단위로 표현
  • 🎂 자바스크립트로 나이 계산하는 3가지 방법
  • JavaScript로 URL 파라미터 업데이트하는 방법
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (456) N
      • 금융 (61)
      • Programing (279) N
        • Algorithm (38) N
        • API (2)
        • javascript (121)
        • CSS (6)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (17)
        • MS-SQL (1)
        • MySQL (12)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (5)
      • IT 일반 (15)
      • 리뷰 (1) N
        • Book (17)
        • 제품 (2) N
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (31)
        • 회고 (2)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    디자인패턴
    IT·컴퓨터
    It
    jsp
    js패턴
    IT 관련
    SQL
    JavaScript
    기초
    자바스크립트유틸
    읽고 싶은 책
    사고 싶은 책
    IT블로그
    자바스크립트
    자바
    블로그
    php
    iT's MY LiFE
    위시리스트
    Java
  • hELLO· Designed By정상우.v4.10.3
Dongkkase
📷 JavaScript로 이미지 리사이징 후 PHP로 업로드하는 방법
상단으로

티스토리툴바