使い方
- Base64 テキストまたは data:image/jpeg;base64 URI を入力欄に貼り付けます。
- プレビュー、判別された形式、画像サイズを確認します。
- JPG はあらかじめ選択されています。「品質」スライダーを調整します。値を高くすると細部がより多く残り、低くするとファイルサイズが小さくなります。
- .jpg ファイルをダウンロードします。既存の JPEG をそのまま保存したい場合は、代わりに「オリジナル」を選択してください。
Base64 の JPEG の見分け方
JPEG ファイルはすべてバイト列 FF D8 FF で始まるため、その Base64 は必ず /9j/ で始まります。続く文字からはファイルの出どころが推測できます。/9j/4AAQSkZJRg は一般的な JFIF 画像で、/9j/4Q は通常、カメラやスマートフォンが書き込んだ Exif ヘッダーを意味します。Base64 の JPEG は、モバイルアプリからのアップロード、フォームの送信データ、CMS のエクスポート、メールの添付ファイル、REST API の写真フィールドなどで見かけます。
JPG と JPEG は同じ形式です。短いほうの拡張子は、ファイルの拡張子が 3 文字に制限されていた MS-DOS の時代に由来します。正しい MIME タイプは image/jpeg です。このツールはバイト列そのものを読み取るため、image/jpg や image/png と記載された data URI でも正しくデコードできます。
品質・透過・メタデータ
JPEG は非可逆圧縮で、エンコードし直すたびに細部が少しずつ失われます。入力がすでに JPEG で、ファイルが必要なだけなら、オリジナルを選択すれば再圧縮せずに保存できます。PNG、WebP などの形式を変換する場合や、大きな写真のファイルサイズを小さくしたい場合は JPG を選択してください。品質を 80~90% 程度に設定するのが、サイズと鮮明さのバランスを取る一般的な方法です。
Node.js で Base64 の JPEG をデコードする
const fs = require('fs');
// data URI のプレフィックスがあれば取り除く
const b64 = input.replace(/^data:[^,]+,/, '');
fs.writeFileSync('photo.jpg', Buffer.from(b64, 'base64'));
逆方向の変換には JPG を Base64 に変換を使うと、写真を文字列や data URI に変換できます。
よくある質問
JPG と JPEG は同じですか?
image/jpeg です。プログラムがどちらか一方の拡張子を要求する場合は、自由にファイル名を変更してかまいません。透明な背景が白くなったのはなぜですか?
JPEG は透過を保存できないため、変換時にはエンコードの前に透明なピクセルを白で塗りつぶします。透明な背景を保持するには、PNG または WebP を選択してください。
画質の劣化を避けるにはどうすればよいですか?
Base64 のデータがすでに JPEG であれば、「オリジナル」でダウンロードすると元のバイト列をそのまま取得できます。JPG として再エンコードすると、品質を高くしても必ず多少の劣化が生じます。
写真の Exif データは保持されますか?
「オリジナル」を選択した場合のみ保持されます。変換した JPG にはピクセルしか含まれないため、写真を共有する前に位置情報を削除する簡単な方法としても使えます。