Base64는 압축이 아니라 인코딩입니다
표준 Base64는 3바이트를 4문자로 표현하므로 정확한 길이는 4 × ceil(n / 3)이고 장기 오버헤드는 약 33.3%입니다. Data URL은 MIME 접두사도 더합니다.
이 도구는 먼저 이미지를 디코딩하고 필요할 때 해상도·품질·형식을 바꾼 뒤 표준 Base64로 다시 인코딩합니다. 별도 압축 해제 코드가 필요 없습니다.
Gzip은 다른 결과를 만듭니다
Base64를 Gzip하면 이미지 요소가 바로 읽을 수 없는 압축 바이너리가 됩니다. 다시 Base64로 감싸도 일반 이미지 Data URL은 아닙니다.
JPEG, PNG, WebP는 이미 압축 형식입니다. 픽셀 수, 손실 품질, 메타데이터 또는 형식 변경으로 줄어들 수 있지만 무손실이나 감소를 보장하지 않습니다.
목표 크기와 비증가 보장
JPEG와 WebP는 제한된 횟수로 품질을 탐색하고, 여전히 크면 가로세로 비율을 유지하며 제한된 단계로 축소합니다.
표준 Base64 문자 수가 줄지 않으면 원본 바이트를 유지합니다. 목표 KB에 완전히 도달하지 못하면 더 작은 최적 후보와 미달 상태를 표시합니다.
로컬 처리와 형식 경계
모든 작업은 탭 안에서 이루어지며 업로드, 원격 URL, 텔레메트리, 외부 이미지 라이브러리가 없습니다. 제한은 20 MiB와 1,600만 픽셀입니다.
SVG, GIF, ICO, 애니메이션 WebP는 실행하거나 첫 프레임으로 만들지 않고 거부합니다. Auto는 투명도를 보존하고 JPEG에는 확인된 배경색이 필요합니다. Canvas는 악성 코드 검사가 아닙니다.
Base64를 피해야 할 때
작은 내장 리소스와 테스트에는 유용하지만 큰 이미지는 Blob URL, 별도 파일, 바이너리 업로드가 캐시와 전송에 더 적합합니다.
이미지 바이트와 Base64 문자를 따로 비교하며 data: 접두사 제거는 절약으로 계산하지 않습니다.
자주 발생하는 오류
- Base64 문자, 패딩 또는 길이가 잘못되었습니다.
- Data URL의 MIME과 실제 magic bytes가 다릅니다.
- 20 MiB 또는 1,600만 픽셀을 넘거나 브라우저가 디코딩하지 못합니다.
- 애니메이션, 다중 프레임, SVG 또는 이미 충분히 최적화된 이미지입니다.
동일한 명령어
현재 사용하는 런타임이나 셸에서 같은 작업을 할 수 있습니다. 신뢰할 수 없는 입력을 검증하고 바이너리를 터미널에 직접 출력하지 마세요.
Python
from PIL import Image
from io import BytesIO
import base64
image = Image.open(BytesIO(base64.b64decode(value)))
out = BytesIO(); image.save(out, 'WEBP', quality=82)
result = base64.b64encode(out.getvalue()).decode('ascii')
JavaScript
const blob = new Blob([bytes], { type: mime });
const bitmap = await createImageBitmap(blob);
ctx.drawImage(bitmap, 0, 0, width, height);
const output = await new Promise(r => canvas.toBlob(r, 'image/webp', 0.82));
bitmap.close();
Shell
printf '%s' "$VALUE" | base64 --decode > input.png
magick input.png -resize '1920x1920>' -quality 82 output.webp
base64 --wrap=0 output.webp
표준 및 공식 문서
Base64 이미지 압축 FAQ
Base64 자체를 압축할 수 있나요?
일반 압축은 가능하지만 다른 바이너리 형식이 됩니다. 표준 이미지 Base64를 유지하려면 이미지 바이트를 최적화하고 다시 인코딩해야 합니다.
img src에 바로 쓸 수 있나요?
예. Raw는 표준 Base64이고 Data URL은 일반 data:image/...;base64 값입니다.
100 KB로 줄이려면?
Custom에서 100 KB를 선택하세요. 품질과 해상도를 제한적으로 탐색하지만 모든 이미지가 목표에 도달하는 것은 아닙니다.
화질이 낮아지나요?
그럴 수 있습니다. 리사이즈와 JPEG/WebP 품질 변경은 손실 작업이며 PNG 재인코딩은 더 작아지지 않을 수 있습니다.
왜 약 33% 커지나요?
3바이트를 4문자로 표현하기 때문이며 정확한 길이는 4 × ceil(n / 3)입니다.
이미지가 업로드되나요?
아니요. 분석, Canvas, 미리보기, 복사, 다운로드가 모두 브라우저 로컬에서 실행됩니다.
Gzip은 Base64 전후 중 언제 쓰나요?
전송에는 필요할 때 바깥 HTTP 응답 압축을 사용하세요. Gzip 데이터는 해제 없이 이미지 Data URL로 쓸 수 없습니다.