ノード.JS識別画像タイプ
2971 ワード
Nodejs識別画像タイプ
ファイル名の拡張子を切断して画像フォーマットを取得する方法は正確ではないです.ファイルの拡張子は強制的に変更されます.このようにしてgif画像も保存されます.jpg、
Nodeではファイルタイプのチェックはどうしますか?
ファイルヘッダの識別により画像フォーマットを判断する.
実はとても簡単です.各画像ファイルにはファイルヘッダの表示があります.各フォーマットの画像のファイルヘッダの表示は全部違っていますので、ファイルヘッダの識別を判断することによって画像フォーマットを識別することができます.
インターネットで資料を探すことによって、下記の画像ファイルのヘッダの表示をまとめました.
1.JPEG/JPG-ファイルヘッダ識別(2 bytes):ff,d 8ファイル終了識別(2 bytes):ff,d 9
2.TGA-非圧縮の前5バイト00-02 00-RLE圧縮の前5バイト00-10 00
3.PNG-ファイルヘッダ識別(8 bytes)89 50 E 47 0 D 0 A 1 A 0 A
4.GIF-ファイルヘッダ識別(6 bytes)47 49 46 38(37)61
5.BMP-ファイルヘッダ識別(2 bytes)42 4 D B M
6.PCX-ファイルヘッダ識別(1 bytes)0 A
7.TIFF-ファイルヘッダ識別(2 bytes)4 D 4 Dまたは49
8.ICO-ファイルヘッダ識別(8 bytes)00 00 01 00 01 00 20
9.CUR-ファイルヘッダID(8 bytes)00 02 00 01 00 20
10.IF-ファイルヘッダ識別(4 bytes)46 4 F 52 4 D
11.ANI-ファイルヘッダ識別(4 bytes)52 49 46
どう判断しますか
画像リソースのバイナリストリームをこの識別子と照合することにより、ピクチャフォーマットを判断することができる.
実現ロジックはとても簡単なので、具体的な実現ロジックはコードとコメントを見ればいいです.ここで参考にして、みんなの開発に便利です.
文章が短いので、あなたの役に立ちたいです.
ファイル名の拡張子を切断して画像フォーマットを取得する方法は正確ではないです.ファイルの拡張子は強制的に変更されます.このようにしてgif画像も保存されます.jpg、
Nodeではファイルタイプのチェックはどうしますか?
ファイルヘッダの識別により画像フォーマットを判断する.
実はとても簡単です.各画像ファイルにはファイルヘッダの表示があります.各フォーマットの画像のファイルヘッダの表示は全部違っていますので、ファイルヘッダの識別を判断することによって画像フォーマットを識別することができます.
インターネットで資料を探すことによって、下記の画像ファイルのヘッダの表示をまとめました.
1.JPEG/JPG-ファイルヘッダ識別(2 bytes):ff,d 8ファイル終了識別(2 bytes):ff,d 9
2.TGA-非圧縮の前5バイト00-02 00-RLE圧縮の前5バイト00-10 00
3.PNG-ファイルヘッダ識別(8 bytes)89 50 E 47 0 D 0 A 1 A 0 A
4.GIF-ファイルヘッダ識別(6 bytes)47 49 46 38(37)61
5.BMP-ファイルヘッダ識別(2 bytes)42 4 D B M
6.PCX-ファイルヘッダ識別(1 bytes)0 A
7.TIFF-ファイルヘッダ識別(2 bytes)4 D 4 Dまたは49
8.ICO-ファイルヘッダ識別(8 bytes)00 00 01 00 01 00 20
9.CUR-ファイルヘッダID(8 bytes)00 02 00 01 00 20
10.IF-ファイルヘッダ識別(4 bytes)46 4 F 52 4 D
11.ANI-ファイルヘッダ識別(4 bytes)52 49 46
:
1バイト(bytes)=8 bitts、上の数字は全部16進数で4 bittsの空間を占め、2つの16進数で1バイトを占めます.どう判断しますか
画像リソースのバイナリストリームをこの識別子と照合することにより、ピクチャフォーマットを判断することができる.
実現ロジックはとても簡単なので、具体的な実現ロジックはコードとコメントを見ればいいです.ここで参考にして、みんなの開発に便利です.
function getImageSuffix(fileBuffer) {
//
const imageBufferHeaders = [
{ bufBegin: [0xff, 0xd8], bufEnd: [0xff, 0xd9], suffix: '.jpg' },
{ bufBegin: [0x00, 0x00, 0x02, 0x00, 0x00], suffix: '.tga' },
{ bufBegin: [0x00, 0x00, 0x10, 0x00, 0x00], suffix: '.rle' },
{
bufBegin: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],
suffix: '.png'
},
{ bufBegin: [0x47, 0x49, 0x46, 0x38, 0x39, 0x61], suffix: '.gif' },
{ bufBegin: [0x47, 0x49, 0x46, 0x38, 0x37, 0x61], suffix: '.gif' },
{ bufBegin: [0x42, 0x4d], suffix: '.bmp' },
{ bufBegin: [0x0a], suffix: '.pcx' },
{ bufBegin: [0x49, 0x49], suffix: '.tif' },
{ bufBegin: [0x4d, 0x4d], suffix: '.tif' },
{
bufBegin: [0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x20, 0x20],
suffix: '.ico'
},
{
bufBegin: [0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x20, 0x20],
suffix: '.cur'
},
{ bufBegin: [0x46, 0x4f, 0x52, 0x4d], suffix: '.iff' },
{ bufBegin: [0x52, 0x49, 0x46, 0x46], suffix: '.ani' }
]
for (const imageBufferHeader of imageBufferHeaders) {
let isEqual
//
if (imageBufferHeader.bufBegin) {
const buf = Buffer.from(imageBufferHeader.bufBegin)
isEqual = buf.equals(
// buffer.slice buffer
fileBuffer.slice(0, imageBufferHeader.bufBegin.length)
)
}
//
if (isEqual && imageBufferHeader.bufEnd) {
const buf = Buffer.from(imageBufferHeader.bufEnd)
isEqual = buf.equals(fileBuffer.slice(-imageBufferHeader.bufEnd.length))
}
if (isEqual) {
return imageBufferHeader.suffix
}
}
//
return ''
}
このようにすれば、Node
で画像フォーマットを正確に識別することができる.文章が短いので、あなたの役に立ちたいです.