> base64 | decode | JPG <

// Base64 문자열 및 데이터 URI를 JPG / JPEG 사진으로 디코딩 — EXIF 보존, 즉시 미리보기, 원클릭 다운로드

0자
🖼️

디코딩된 JPEG가 여기에 표시됩니다

[FAITHFUL]

재압축 없음

디코더에서 나오는 JPEG 바이트는 인코딩된 것과 비트 단위로 동일합니다 — 동일한 품질, 동일한 EXIF, 동일한 DCT 계수.

[PRIVATE]

로컬 디코딩

Base64 문자열은 브라우저에서 전적으로 atob()로 디코딩됩니다. 업로드 없음. 서버 없음. 페이로드에 대한 분석 없음.

[INSTANT]

실시간 미리보기

디코딩된 사진과 크기를 즉시 확인하세요 — 원클릭으로 .jpg로 다운로드하세요.

// BASE64 TO JPG 정보

이 도구가 허용하는 것

  • >데이터 URI: data:image/jpeg;base64,/9j/4AAQSkZ…
  • >원시 JPEG Base64 페이로드(/9j/로 시작)
  • >공백 / 줄 바꿈이 포함된 Base64
  • >표준 RFC 4648 알파벳(+/, 선택적 = 패딩)
  • >URL-safe Base64(-_) — 디코딩 시 자동 정규화
  • >멀티 파트 JPEG(JFIF, EXIF, Adobe, SPIFF 마커)

일반적인 사용 사례

  • >JSON API 응답에서 사진 복구
  • >데이터베이스 TEXT 열에서 프로필 아바타 추출
  • >데이터 URI로 저장된 CMS 이미지 필드 디코딩
  • >이메일 MIME 파트에서 사진 재구성
  • >WebSocket으로 보낸 카메라 스냅샷 렌더링
  • >손상된 <img src="data:image/jpeg;base64,…"> 태그 디버깅
  • >사진을 Base64로 캐시하는 오프라인 우선 앱

Base64 → JPG 디코딩 원리

디코더는 데이터 URI 접두사를 제거하고, 공백과 URL-safe 문자를 정규화한 다음, atob()를 호출하여 각 4문자 Base64 그룹을 다시 3 바이너리 바이트로 변환합니다. 결과는 MIME 타입 image/jpeg인 Blob으로 감싸지며 <img> 태그로 미리 보여집니다. Base64는 전단사 바이너리-텍스트 변환이기 때문에 출력 JPEG는 원본과 비트 단위로 동일합니다 — SHA-256 해시가 일치하며 품질이 손실되지 않습니다.

JPEG 데이터 URI 예시:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/wAALCAABAAEBAREA/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/9oACAEBAAA/AKp//9k=

성능 및 호환성

  • >디코딩은 페이로드 길이에 대해 O(n) — 100 MB 이상도 문제없이 처리
  • >네이티브 atob() + Uint8Array 사용 — 서드파티 라이브러리 없음
  • >모든 주요 카메라 제조사의 EXIF가 풍부한 JPEG 지원
  • >Chrome, Firefox, Safari, Edge 및 모바일 브라우저에서 작동
  • >모바일 기기에서 핀치 투 줌 미리보기
  • >Blob URL을 통한 다운로드 — 서버 왕복 없음

// BASE64 → JPG 디코딩 방법

📋

1단계: 붙여넣기

Base64 문자열이나 전체 데이터 URI를 입력 필드에 붙여넣으세요

🔍

2단계: 디코딩

[DECODE]를 클릭하세요 — JPEG가 즉시 렌더링됩니다

📊

3단계: 검사

저장하기 전에 사진, 크기 및 파일 크기를 확인하세요

💾

4단계: 다운로드

[DOWNLOAD .jpg]를 클릭하여 디스크에 비트 동일 JPEG를 저장하세요

// 코드 예시 — BASE64 TO JPG

JavaScript (브라우저)

// Decode Base64 → JPEG Blob → preview
const b64 = '/9j/4AAQSkZJRgAB...';
const bin = atob(b64);
const arr = new Uint8Array(bin.length);
for (let i = 0; i < bin.length; i++) arr[i] = bin.charCodeAt(i);
const blob = new Blob([arr], { type: 'image/jpeg' });
document.getElementById('preview').src = URL.createObjectURL(blob);

원시 Base64 JPEG 페이로드를 디코딩하고 Blob으로 감싼 다음 <img>로 렌더링합니다. 데이터 URI는 src에 직접 설정할 수 있습니다.

Node.js

const fs = require('fs');
const b64 = '/9j/4AAQSkZJRgAB...';
fs.writeFileSync('out.jpg', Buffer.from(b64, 'base64'));

Node의 내장 Buffer를 사용하여 Base64 텍스트를 JPEG 파일로 디코딩합니다.

Python

import base64
with open('out.jpg', 'wb') as f:
    f.write(base64.b64decode('/9j/4AAQSkZJRgAB...'))

표준 라이브러리만으로 — Base64 → JPEG 바이트 → 파일.

PHP

<?php
file_put_contents('out.jpg', base64_decode('/9j/4AAQSkZJRgAB...'));

base64_decode() 및 file_put_contents()를 사용하는 한 줄.

Shell (macOS / Linux)

echo '/9j/4AAQSkZJRgAB...' | base64 -d > out.jpg

POSIX base64 -d는 stdin에서 문자열을 읽고 JPEG를 디스크에 씁니다.

// FAQ — BASE64 TO JPG

Q: Base64 → JPG 디코딩이란 무엇인가요?

A: Base64로 인코딩된 JPEG를 원본 바이너리 형식으로 되돌립니다. 디코더는 Base64 문자열에서 한 번에 4 ASCII 문자를 읽고, RFC 4648 알파벳에서 찾아보고, 그룹당 3 바이너리 바이트를 출력합니다. 결과 바이트 배열은 완전하고 유효한 JPEG 파일입니다 — 동일한 DCT 계수, 동일한 허프만 테이블, 동일한 EXIF 메타데이터, 인코딩 전과 동일한 품질.

Q: Base64 문자열이 정말 JPEG인지 어떻게 알 수 있나요?

A: 모든 JPEG는 두 매직 바이트 FF D8(이미지 시작)로 시작합니다. 이 바이트를 Base64로 인코딩하면 처음 4문자는 항상 /9j/입니다. 따라서 /9j/4AAQ(JFIF 헤더) 또는 /9j/2wC(Adobe APP14를 사용하는 많은 스마트폰 카메라)로 시작하는 Base64 문자열은 JPEG입니다. 다른 형식은 다른 접두사를 가집니다: PNG는 iVBORw0KGgo, GIF는 R0lGOD, WebP는 UklGR.

Q: 데이터 URI를 직접 디코딩할 수 있나요?

A: 예. 문자열이 data:image/jpeg;base64,로 시작하면 디코더가 해당 접두사를 자동으로 제거하고 페이로드를 처리합니다. 원시 Base64 부분만 있는 경우 이 도구는 JPEG 매직 넘버(/9j/)를 감지하고 미리보기용으로 디코딩된 바이트를 image/jpeg로 감쌉니다. 공백, 줄 바꿈 및 탭은 모두 디코딩 전에 제거되므로 예쁘게 출력된 JSON 값을 바로 붙여넣을 수 있습니다.

Q: 디코딩이 JPEG의 품질을 저하시키나요?

A: 아니요. Base64 디코딩은 순수한 바이너리 변환입니다 — 각 Base64 문자는 6비트에 결정적으로 매핑되며 4문자는 3바이트로 디코딩됩니다. 나오는 JPEG 바이트는 인코딩된 것과 비트 단위로 동일하므로 품질은 원본 JPEG가 저장된 품질 그대로입니다. 디코딩된 파일의 SHA-256 해시가 원본의 해시와 일치합니다. 디코딩된 사진이 예상보다 나빠 보인다면 품질 손실은 JPEG가 처음 저장될 때 발생한 것이지 Base64 왕복 중이 아닙니다.

Q: 디코딩된 JPG가 손상되었습니다 — 무엇이 잘못되었을까요?

A: 일반적인 원인:
잘린 문자열 — Base64가 어딘가에서 잘렸습니다. 완전한 JPEG는 FF D9(이미지 끝)로 끝나며, 이는 Base64에서 /9k= 또는 2Q==로 인코딩됩니다. 문자열이 이러한 패턴 중 하나와 선택적 패딩으로 끝나지 않으면 불완전합니다.
이중 인코딩 — JPEG가 두 번 Base64로 인코딩되었습니다. 다시 디코딩하세요.
URL-safe 알파벳 — 문자열이 +/ 대신 -_를 사용하면 일부 디코더는 거부합니다. 우리 도구는 둘 다 정규화합니다.
실제로는 다른 형식 — 페이로드가 PNG 또는 WebP입니다. 형식을 자동 감지하는 일반 Base64 → 이미지 디코더를 사용하세요.

Q: 디코딩 후 EXIF 메타데이터가 보존되나요?

A: 예. EXIF APP1 세그먼트(카메라 모델, GPS, 날짜/시간, 렌즈, ISO, 화이트 밸런스, 방향 등)는 JPEG 바이트 스트림의 일부입니다. Base64는 비트 단위로 가역적이기 때문에 모든 바이트 — EXIF 포함 — 가 복원됩니다. 개인정보 보호를 위해 EXIF가 없는 사진이 필요한 경우 디코딩 exiftool -all= out.jpg 같은 도구나 브라우저의 캔버스 기반 재내보내기로 메타데이터를 제거하세요.

Q: 터미널에서 Base64를 JPG로 디코딩할 수 있나요?

A: 예. macOS 및 Linux에서:
echo '/9j/4AAQSkZJRgAB…' | base64 -d > out.jpg
(구 macOS base64-D를 사용합니다.)
Windows PowerShell에서:
[IO.File]::WriteAllBytes('out.jpg', [Convert]::FromBase64String('/9j/4AAQSkZJRgAB…'))
입력이 전체 데이터 URI인 경우 먼저 sed 's|^data:.*base64,||'를 통해 파이프하여 접두사를 제거하세요.

Q: 얼마나 큰 Base64 JPG를 디코딩할 수 있나요?

A: 브라우저의 메모리 한계까지. 100 MB의 디코딩된 JPEG는 약 135 MB의 Base64 텍스트가 필요하며, 최신 데스크톱 브라우저는 문제없이 처리합니다. 모바일 브라우저는 약 40 MB까지 안정적입니다. 매우 큰 사진(중형 포맷 카메라의 RAW 변환 JPEG 내보내기)의 경우 서버 측 디코딩을 고려하세요: base64 -d photo.b64 > photo.jpg는 브라우저 왕복보다 훨씬 빠릅니다.

Q: 디코더는 오프라인에서 작동하나요?

A: 예, 초기 페이지 로드 후. 모든 디코딩은 내장 브라우저 API(atob(), Uint8Array, Blob, URL.createObjectURL())를 사용하며, 이들 중 어느 것도 네트워크 연결이 필요하지 않습니다. 네트워크를 비활성화하고 계속 디코딩하여 이를 확인할 수 있습니다 — 미리보기와 다운로드 모두 계속 작동합니다.

Q: Base64 JPEG는 암호화되거나 비공개인가요?

A: 아니요. Base64는 인코딩이지 암호화가 아닙니다. Base64 문자열을 가진 누구나 밀리초 내에 원본 사진으로 다시 디코딩할 수 있으며, EXIF 데이터(GPS 좌표 포함)가 함께 따라옵니다. JPEG에 민감한 정보가 포함된 경우 Base64를 적용하기 전에 암호화(AES-GCM, age, PGP)하고, 문자열을 HTTPS를 통해서만 전송하세요.

Q: 디코딩은 클라이언트 측인가요 — 업로드되는 것이 있나요?

A: 아무것도 업로드되지 않습니다. 모든 단계 — 접두사 제거, 공백 정규화, atob() 호출, Blob 빌드, <img> 렌더링, 다운로드 트리거 — 가 브라우저에서 일어납니다. 디코딩하는 동안 브라우저 개발 도구의 네트워크 탭을 열면 Base64 페이로드에 대한 외부 요청이 0인 것을 볼 수 있습니다. 이 도구는 기밀 스크린샷, 개인 사진 및 규제 대상 데이터에 안전합니다.

Q: 프로덕션 코드에서 Base64를 JPG로 어떻게 디코딩하나요?

A: Node.js에서: fs.writeFileSync('out.jpg', Buffer.from(b64, 'base64')). Python에서: open('out.jpg','wb').write(base64.b64decode(b64)). Go에서: b, _ := base64.StdEncoding.DecodeString(b64); os.WriteFile("out.jpg", b, 0644). Java에서: Files.write(Path.of("out.jpg"), Base64.getDecoder().decode(b64)). Rust에서: std::fs::write("out.jpg", base64::decode(b64)?)?. Ruby에서: File.binwrite('out.jpg', Base64.decode64(b64)). PHP에서: file_put_contents('out.jpg', base64_decode($b64)).

Q: Base64 → JPG vs Base64 → PNG — 어느 것을 사용해야 하나요?

A: Base64 문자열의 접두사를 보세요. /9j/로 시작하면 JPEG입니다 — Base64 → JPG를 사용하세요. iVBORw0KGgo로 시작하면 PNG입니다 — Base64 → PNG를 사용하세요. JPEG 디코더에 PNG를 방출하도록(또는 그 반대로) 강제할 수 없습니다. 매직 바이트가 진실을 말합니다. 의심스러운 경우 형식을 자동으로 감지하고 올바른 확장자로 저장하는 일반 디코더를 사용하세요.

// OTHER LANGUAGES