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、1600万画素です。
SVG、GIF、ICO、アニメーション WebP は実行・先頭フレーム化せず拒否します。Auto は透明度を守り、JPEG 変換には背景色の明示確認が必要です。Canvas はマルウェア検査ではありません。
Base64 を避ける場面
小さな自己完結アセットやテストには便利ですが、大きな画像は Blob URL、別ファイル、バイナリアップロードの方がキャッシュと転送に適します。
画像バイトと Base64 文字数を別々に比較します。data: 接頭辞を外しただけの差は圧縮に含めません。
よくある失敗と原因
- Base64 の文字、padding、長さが不正です。
- Data URL の MIME と magic bytes が一致しません。
- 20 MiB または1600万画素を超えるか、ブラウザーがデコードできません。
- アニメーション、多重画像、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 画像圧縮のよくある質問
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 として使えません。