Node.js で Base64 の画像データを Buffer に変換して素の画像ファイルタイプ判定するメモ
Node.js で Base64 の画像データを Buffer に変換して素の画像ファイルタイプ判定するメモです。
背景
ちょっとややこしい話です。
最近 Node-RED で行った処理ですが、いろいろと Base64 データで画像データが溜まっているけれど、そのデータの中身が PNG か JPG かを判定する必要があり、あえて Buffer データに変換し 1 バイト目の内容で PNG なのか JPG なのか画像ファイルタイプ判定しました。
実際のコード
実際のコードはこちらです。
function getFileType(base64String) {
// プレフィックスがある場合は除去
const cleanedBase64 = base64String.includes(",") ? base64String.split(",")[1] : base64String;
// Node.js では Buffer を使って base64 をデコードする
const buffer = Buffer.from(cleanedBase64, 'base64');
const firstByte = buffer[0];
if (firstByte === 0xFF) { // JPEGの先頭バイトは 0xFF
return "jpg";
} else if (firstByte === 0x89) { // PNGの先頭バイトは 0x89
return "png";
}
return "unknown";
}
base64String として Base64 データが来るとして、プレフィックス自体は今回はアテにしないので、簡易的にプレフィックスがある場合は除去します。
そして Node.js では Buffer クラスを使って base64 をデコードした上で、JPEG の先頭バイトは 0xFF 、PNG の先頭バイトは 0x89 で判定するようにしています。
開発途中で JPEG 想定で Base64 やプレフィックスを作っちゃってたけど、実は PNG データや GIF データも混入してしまっていて、よくわからなくなっていたので、これで、素の画像ファイルタイプ判定ができたので助かりました。