Develop+㈜/- Computer.P

[사업Item] 아이폰에서 촬영한 HEIC 확장자를 일반적인 확장자(JPG)변경하는 사이트 반드는법

JoyKim 2025. 3. 10. 23:04
반응형



갑자기 인터넷에보면 인터넷에 확장자를 변경해주는 사이트가 있잖아요..
그래서 GPT에 이런 사이트 어떻게 하는지 알아봤습니다.



제가 바로 만드는건 어렵겠지만 광고 수입 모델로 괜찮은 것 같내요. Item 참고하세요 :)


아이폰에서 촬영한 이미지는 기본적으로 HEIC (High Efficiency Image Coding) 포맷으로 저장됩니다. 이 파일을 JPG로 변환하는 웹사이트를 만들기 위해 필요한 요소들을 정리해볼게요.



1. 필요한 기술 스택

웹사이트를 만들려면 다음 기술 스택이 필요합니다.
• 프론트엔드 (사용자 인터페이스)
• HTML, CSS, JavaScript
• 파일 업로드 UI
• 변환 진행 표시 (로딩 상태)
• 백엔드 (파일 변환 처리)
• Python (Flask, FastAPI) 또는 Node.js (Express)
• pillow, pyheif 같은 이미지 변환 라이브러리 (Python의 경우)
• 파일 저장 및 처리
• 로컬 스토리지 또는 AWS S3 같은 클라우드 스토리지
• 파일 변환 후 자동 삭제 기능 (보안 및 저장 공간 절약)



2. 기본적인 사이트 동작 흐름
1. 사용자가 HEIC 파일을 업로드합니다.
2. 서버에서 HEIC → JPG 변환을 진행합니다.
3. 변환된 파일을 사용자에게 다운로드 링크로 제공합니다.
4. 일정 시간이 지나면 파일 자동 삭제 (예: 10~30분 후).



3. HEIC → JPG 변환 기능 구현 (Python 예제)

백엔드에서는 Python의 Pillow & pyheif 라이브러리를 사용해 변환할 수 있습니다.

from flask import Flask, request, send_file
import pyheif
from PIL import Image
import os

app = Flask(__name__)
UPLOAD_FOLDER = "uploads"
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

def heic_to_jpg(heic_path, jpg_path):
    heif_file = pyheif.read(heic_path)
    image = Image.frombytes(
        heif_file.mode, heif_file.size, heif_file.data, "raw", heif_file.mode, heif_file.stride
    )
    image.save(jpg_path, "JPEG")

@app.route("/upload", methods=["POST"])
def upload_file():
    if "file" not in request.files:
        return "파일을 업로드해주세요", 400

    file = request.files["file"]
    if file.filename == "":
        return "파일이 선택되지 않았습니다.", 400

    heic_path = os.path.join(UPLOAD_FOLDER, file.filename)
    jpg_path = heic_path.rsplit(".", 1)[0] + ".jpg"
    file.save(heic_path)

    heic_to_jpg(heic_path, jpg_path)
    os.remove(heic_path)  # 원본 HEIC 파일 삭제

    return send_file(jpg_path, as_attachment=True)

if __name__ == "__main__":
    app.run(debug=True)





4. 프론트엔드 UI

간단한 HTML & JavaScript를 이용해 파일 업로드 및 다운로드 기능을 구현할 수 있습니다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HEIC to JPG 변환기</title>
</head>
<body>
    <h2>아이폰 이미지 (HEIC) → JPG 변환</h2>
    <input type="file" id="fileInput" accept=".heic">
    <button onclick="uploadFile()">변환하기</button>
    <p id="status"></p>
    <script>
        async function uploadFile() {
            let fileInput = document.getElementById("fileInput");
            if (!fileInput.files.length) {
                alert("파일을 선택해주세요!");
                return;
            }

            let formData = new FormData();
            formData.append("file", fileInput.files[0]);

            document.getElementById("status").innerText = "변환 중...";

            let response = await fetch("/upload", {
                method: "POST",
                body: formData,
            });

            if (response.ok) {
                let blob = await response.blob();
                let url = window.URL.createObjectURL(blob);
                let a = document.createElement("a");
                a.href = url;
                a.download = "converted.jpg";
                document.body.appendChild(a);
                a.click();
                a.remove();
                document.getElementById("status").innerText = "변환 완료!";
            } else {
                document.getElementById("status").innerText = "변환 실패!";
            }
        }
    </script>
</body>
</html>





5. 배포하기

웹사이트를 실제 서비스로 운영하려면 서버 배포가 필요합니다.
• 로컬 개발: Flask + ngrok을 이용해 임시 URL 생성
• 클라우드 배포:
• Heroku (간단한 배포 가능)
• AWS (EC2, S3, Lambda)
• Vercel (프론트엔드 배포) + Railway or Render (백엔드 배포)



6. 확장 아이디어

이 사이트를 더 발전시키고 싶다면 다음과 같은 기능을 추가할 수도 있습니다.

✅ 다중 파일 업로드 지원
✅ 변환 후 자동 삭제 (보안 강화)
✅ 드래그 앤 드롭 기능 추가
✅ 구글 드라이브 / 아이클라우드 연동
✅ PNG, WEBP 등 추가 변환 옵션 제공



7. 결론

이렇게 하면 간단한 HEIC to JPG 변환 사이트를 만들 수 있습니다.
프론트엔드는 기본적인 HTML + JavaScript로 구성하고, 백엔드는 Flask 또는 FastAPI를 사용해 HEIC 파일을 처리하고 변환한 후 다운로드할 수 있도록 구현하면 됩니다.

추가 기능이 필요하면 말씀해 주세요!

반응형