通过文件头标识判断图片格式
所有类型文件的文件头标志
各类文件的文件头标志1、从Ultra-edit-32中提取出来的JPEG (jpg),文件头:FFD8FFPNG (png),文件头:89504E47GIF (gif),文件头:47494638TIFF (tif),文件头:49492A00Windows Bitmap (bmp),文件头:424DCAD (dwg),文件头:41433130Adobe Photoshop (psd),文件头:38425053Rich Text Format (rtf),文件头:7B5C727466XML (xml),文件头:3C3F786D6CHTML (html),文件头:68746D6C3EEmail [thorough only] (eml),文件头:44656C69766572792D646174653A Outlook Express (dbx),文件头:CFAD12FEC5FD746FOutlook (pst),文件头:2142444EMS Word/Excel (xls.or.doc),文件头:D0CF11E0MS Access (mdb),文件头:5374616E64617264204AWordPerfect (wpd),文件头:FF575043Postscript (eps.or.ps),文件头:252150532D41646F6265Adobe Acrobat (pdf),文件头:255044462D312EQuicken (qdf),文件头:AC9EBD8FWindows Password (pwl),文件头:E3828596ZIP Archive (zip),文件头:504B0304RAR Archive (rar),文件头:52617221Wave (wav),文件头:57415645AVI (avi),文件头:41564920Real Audio (ram),文件头:2E7261FDReal Media (rm),文件头:2E524D46MPEG (mpg),文件头:000001BAMPEG (mpg),文件头:000001B3Quicktime (mov),文件头:6D6F6F76Windows Media (asf),文件头:3026B2758E66CF11 MIDI (mid),文件头:4D5468642、从winhex中取出的文件头列表File Type ExtensionsHeaderJPEG jpg;jpeg 0xFFD8FFPNG png 0x89504E470D0A1A0AGIF gif GIF8TIFF tif;tiff 0x49492A00TIFF tif;tiff 0x4D4D002ABit map bmp BMAOL ART art 0x4A47040E000000AOL ART art 0x4A47030E000000PC Paintbrush pcx 0x0A050108Graphics Metafile wmf 0xD7CDC69AGraphics Metafile wmf 0x01000900Graphics Metafile wmf 0x02000900Enhanced Metafile emf 0x0100000058000000Corel Draw cdr CDRCAD dwg 0x41433130Adobe Photoshop psd 8BPSRich Text Format rtf rtfXML xmlHTML html;htm;php;php3;php4;phtml;shtml typeEmail eml Delivery-date:Outlook Express dbx 0xCFAD12FEOutlookpst!BDNMS Office/OLE2 doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db 0xD0CF11E0A1B11AE1MS Access mdb;mda;mde;mdt Standard JWordPerfect wpd 0xFF575043OpenOffice Writer sxw writerOpenOffice Calc sxc calcOpenOffice Math sxm mathOpenOffice Impress sxi impressOpenOffice Draw sxd drawAdobe FrameMaker fm <MAKERFILEPostScript eps.or.ps;ps;eps %!PS-AdobeAdobe Acrobat pdf %PDF-1.Quicken qdf 0xAC9EBD8FQuickBooks Backup qbb 0x458600000600Sage sly.or.srt.or.slt;sly;srt;slt 0x53520100Sage Backup 1 SAGEBACKUPLotus WordPro v9 lwp 0x576F726450726FLotus 123 v9 123 0x00001A00051004Lotus 123 v5 wk4 0x00001A0002100400Lotus 123 v3 wk3 0x00001A0000100400Lotus 123 v1 wk1 0x2000604060Windows Password pwl 0xE3828596ZIP Archive zip;jar 0x504B0304ZIP Archive (outdated) zip 0x504B3030RAR Archive rar Rar!GZ Archive gz;tgz 0x1F8B08BZIP Archive bz2 BZhARJ Archive arj 0x60EA7-ZIP Archive 7z 7z集'Wave wav WAVEAVI avi AVIReal Audio ram;ra .ra?0Real Media rm .RMFMPEG mpg;mpeg 0x000001BAMPEG mpg;mpeg 0x000001B3Quicktime mov moovWindows Media asf 0x3026B2758E66CF11MIDI mid MThdWin32 Executable exe;dll;drv;vxd;sys;ocx;vbx MZWin16 Executable exe;dll;drv;vxd;sys;ocx;vbx MZELF Executable elf;; 0x7F454C4601010100各种文件类型文件头标志位详细列表FFD8FFFE00, .JPEG;.JPE;.JPG, "JPG Graphic File"FFD8FFE000, .JPEG;.JPE;.JPG, "JPG Graphic File"474946383961, .gif, "GIF 89A"474946383761, .gif, "GIF 87A"424D, .bmp, "Windows Bitmap"4D5A, .exe;.com;.386;.ax;.acm;.sys;.dll;.drv;.flt;.fon;.ocx;.scr;.lrc;.v xd;.cpl;.x32, "Executable File"504B0304, .zip, "Zip Compressed"3A42617365, .cnt, ""D0CF11E0A1B11AE1, .doc;.xls;.xlt;.ppt;.apr, "MS Compound Document v1 or Lotus Approach APR file"0100000058000000, .emf, ""03000000C466C456, .evt, ""3F5F0300, .gid;.hlp;.lhp, "Windows Help File"1F8B08, .gz, "GZ Compressed File"28546869732066696C65, .hqx, ""0000010000, .ico, "Icon File"4C000000011402, .lnk, "Windows Link File"25504446, .pdf, "Adobe PDF File"5245474544495434, .reg, ""7B5C727466, .rtf, "Rich Text Format File"lh, .lzh, "Lz compression file"MThd, .mid, ""0A050108, .pcx, ""25215053, .eps, "Adobe EPS File"2112, .ain, "AIN Archive File"1A02, .arc, "ARC/PKPAK Compressed 1"1A03, .arc, "ARC/PKPAK Compressed 2"1A04, .arc, "ARC/PKPAK Compressed 3"1A08, .arc, "ARC/PKPAK Compressed 4"1A09, .arc, "ARC/PKPAK Compressed 5"60EA, .arj, "ARJ Compressed"41564920, .avi, "Audio Video Interleave (AVI)"425A68, .bz;.bz2, "Bzip Archive"49536328, .cab, "Cabinet File"4C01, .obj, "Compiled Object Module"303730373037, .tar;.cpio, "CPIO Archive File" 4352555348, .cru;.crush, "CRUSH Archive File"3ADE68B1, .dcx, "DCX Graphic File"1F8B, .gz;.tar;.tgz, "Gzip Archive File"91334846, .hap, "HAP Archive File"3C68746D6C3E, .htm;.html, "HyperText Markup Language 1" 3C48544D4C3E, .htm;.html, "HyperText Markup Language 2" 3C21444F4354, .htm;.html, "HyperText Markup Language 3"100, .ico, "ICON File"5F27A889, .jar, "JAR Archive File"2D6C68352D, .lha, "LHA Compressed"20006040600, .wk1;.wks, "Lotus 123 v1 Worksheet"00001A0007800100, .fm3, "Lotus 123 v3 FMT file"00001A0000100400, .wk3, "Lotus 123 v3 Worksheet" 20006800200, .fmt, "Lotus 123 v4 FMT file"00001A0002100400, .wk4, "Lotus 123 v5"5B7665725D, .ami, "Lotus Ami Pro"300000041505052, .adx, "Lotus Approach ADX file"1A0000030000, .nsf;.ntf, "Lotus Notes Database/Template" 4D47582069747064, .ds4, "Micrografix Designer 4"4D534346, .cab, "Microsoft CAB File Format"4D546864, .mid, "Midi Audio File"000001B3, .mpg;.mpeg, "MPEG Movie"0902060000001000B9045C00, .xls, "MS Excel v2" 0904060000001000F6055C00, .xls, "MS Excel v4"7FFE340A, .doc, "MS Word"1234567890FF, .doc, "MS Word 6.0"31BE000000AB0000, .doc, "MS Word for DOS 6.0"1A00000300001100, .nsf, "Notes Database"7E424B00, .psp, "PaintShop Pro Image File"504B0304, .zip, "PKZIP Compressed"89504E470D0A, .png, "PNG Image File"6D646174, .mov, "QuickTime Movie"6D646174, .qt, "Quicktime Movie File"52617221, .rar, "RAR Archive File"2E7261FD, .ra;.ram, "Real Audio File"EDABEEDB, .rpm, "RPM Archive File"2E736E64, .au, "SoundMachine Audio File"53495421, .sit, "Stuffit v1 Archive File"53747566664974, .sit, "Stuffit v5 Archive File"1F9D, .z, "TAR Compressed Archive File"49492A, .tif;.tiff, "TIFF (Intel)"4D4D2A, .tif;.tiff, "TIFF (Motorola)"554641, .ufa, "UFA Archive File"57415645666D74, .wav, "Wave Files"D7CDC69A, .wmf, "Windows Meta File"4C000000, .lnk, "Windows Shortcut (Link File)"504B3030504B0304, .zip, "WINZIP Compressed"FF575047, .wpg, "WordPerfect Graphics"FF575043, .wp, "WordPerfect v5 or v6"3C3F786D6C, .xml, "XML Document"FFFE3C0052004F004F0054005300540055004200, .xml, "XML Document (ROOTSTUB)" 3C21454E54495459, .dtd, "XML DTD"5A4F4F20, .zoo, "ZOO Archive File"通过文件头标识判断图片格式最近在做东西的时候遇到了点问题,在加载图片的时候,加载失败,后缀都是jpg格式,但换个图片就可以了,为此,怀疑图片格式有问题,遂拖到UE里面查看它的16进制,果然,两个图片的文件头根本就不一样,这不是欺负人嘛,害我白白浪费了半天的时间,差点要重新编译内核。
bmp解码原理
bmp解码原理
BMP(Bitmap Image File)是一种常见的图像文件格式,其解码原理主要包括以下几个步骤:
1. 读取文件头信息:BMP文件以特定的文件头标识开始,用于标识该文件
是一个BMP格式的文件。
这些信息包括BMP文件的类型、大小、版本等。
2. 解析图像头信息:紧随文件头信息之后的是图像头信息,包括图像的宽度、高度、像素数、颜色深度等信息。
这些信息用于确定图像的尺寸、颜色模式等。
3. 读取像素数据:根据图像头信息中的宽度、高度和像素数,读取相应的像素数据。
BMP图像的像素数据按照一定的顺序存储,通常是按照行优先的
顺序逐行读取。
4. 转换像素数据:由于BMP图像的像素数据是以特定的格式存储的,解码时需要将这些数据转换为可显示的像素值。
这通常涉及到将颜色深度转换为实际的颜色值,以及进行必要的色彩空间转换等。
5. 显示图像:将解码后的像素数据送入显示设备,按照一定的显示模式进行显示,最终呈现出BMP图像的内容。
在解码过程中,需要注意一些细节问题,比如数据对齐、像素格式转换等。
此外,还需要根据具体的BMP版本和编码方式进行相应的解码处理。
各类文件的文件头标志
各类文件的文件头标志1、从Ultra-edit-32中提取出来的JPEG (jpg),文件头:FFD8FFPNG (png),文件头:89504E47GIF (gif),文件头:47494638TIFF (tif),文件头:49492A00Windows Bitmap (bmp),文件头:424DCAD (dwg),文件头:41433130Adobe Photoshop (psd),文件头:38425053Rich Text Format (rtf),文件头:7B5C727466XML (xml),文件头:3C3F786D6CHTML (html),文件头:68746D6C3EEmail [thorough only] (eml),文件头:44656C69766572792D646174653AOutlook Express (dbx),文件头:CFAD12FEC5FD746FOutlook (pst),文件头:2142444EMS Word/Excel (xls.or.doc),文件头:D0CF11E0MS Access (mdb),文件头:5374616E64617264204A WordPerfect (wpd),文件头:FF575043Postscript (eps.or.ps),文件头:252150532D41646F6265Adobe Acrobat (pdf),文件头:255044462D312EQuicken (qdf),文件头:AC9EBD8FWindows Password (pwl),文件头:E3828596ZIP Archive (zip),文件头:504B0304RAR Archive (rar),文件头:52617221Wave (wav),文件头:57415645A VI (avi),文件头:41564920Real Audio (ram),文件头:2E7261FDReal Media (rm),文件头:2E524D46MPEG (mpg),文件头:000001BAMPEG (mpg),文件头:000001B3Quicktime (mov),文件头:6D6F6F76Windows Media (asf),文件头:3026B2758E66CF11MIDI (mid),文件头:4D5468642、从winhex中取出的文件头列表File Type ExtensionsHeaderJPEG jpg;jpeg 0xFFD8FFPNG png 0x89504E470D0A1A0AGIF gif GIF8TIFF tif;tiff 0x49492A00TIFF tif;tiff 0x4D4D002ABit map bmp BMAOL ART art 0x4A47040E000000AOL ART art 0x4A47030E000000PC Paintbrush pcx 0x0A050108Graphics Metafile wmf 0xD7CDC69AGraphics Metafile wmf 0x01000900Graphics Metafile wmf 0x02000900Enhanced Metafile emf 0x0100000058000000Corel Draw cdr CDRCAD dwg 0x41433130Adobe Photoshop psd 8BPSRich Text Format rtf rtfXML xmlHTML html;htm;php;php3;php4;phtml;shtml typeEmail eml Delivery-date:Outlook Express dbx 0xCFAD12FEOutlookpst!BDNMS Office/OLE2 doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db 0xD0CF11E0A1B11AE1MS Access mdb;mda;mde;mdt Standard JWordPerfect wpd 0xFF575043OpenOffice Writer sxw writerOpenOffice Calc sxc calcOpenOffice Math sxm mathOpenOffice Impress sxi impressOpenOffice Draw sxd drawAdobe FrameMaker fm <MAKERFILEPostScript eps.or.ps;ps;eps %!PS-AdobeAdobe Acrobat pdf %PDF-1.Quicken qdf 0xAC9EBD8F QuickBooks Backup qbb 0x458600000600Sage sly.or.srt.or.slt;sly;srt;slt 0x53520100Sage Backup 1 SAGEBACKUPLotus WordPro v9 lwp 0x576F726450726FLotus 123 v9 123 0x00001A00051004Lotus 123 v5 wk4 0x00001A0002100400Lotus 123 v3 wk3 0x00001A0000100400Lotus 123 v1 wk1 0x2000604060Windows Password pwl 0xE3828596ZIP Archive zip;jar 0x504B0304ZIP Archive (outdated) zip 0x504B3030RAR Archive rar Rar!GZ Archive gz;tgz 0x1F8B08BZIP Archive bz2 BZhARJ Archive arj 0x60EA7-ZIP Archive 7z 7z集'Wave wav WAVEA VI avi AVIReal Audio ram;ra .ra?0Real Media rm .RMFMPEG mpg;mpeg 0x000001BAMPEG mpg;mpeg 0x000001B3Quicktime mov moovWindows Media asf 0x3026B2758E66CF11MIDI mid MThdWin32 Executable exe;dll;drv;vxd;sys;ocx;vbx MZWin16 Executable exe;dll;drv;vxd;sys;ocx;vbx MZELF Executable elf;; 0x7F454C4601010100各种文件类型文件头标志位详细列表FFD8FFFE00, .JPEG;.JPE;.JPG, "JPG Graphic File"FFD8FFE000, .JPEG;.JPE;.JPG, "JPG Graphic File" 474946383961, .gif, "GIF 89A"474946383761, .gif, "GIF 87A"424D, .bmp, "Windows Bitmap"4D5A, .exe;.com;.386;.ax;.acm;.sys;.dll;.drv;.flt;.fon;.ocx;.scr;.lrc;.vxd; .cpl;.x32, "Executable File"504B0304, .zip, "Zip Compressed"3A42617365, .cnt, ""D0CF11E0A1B11AE1, .doc;.xls;.xlt;.ppt;.apr, "MS Compound Document v1 or Lotus Approach APR file" 0100000058000000, .emf, ""03000000C466C456, .evt, ""3F5F0300, .gid;.hlp;.lhp, "Windows Help File"1F8B08, .gz, "GZ Compressed File"28546869732066696C65, .hqx, ""0000010000, .ico, "Icon File"4C000000011402, .lnk, "Windows Link File"25504446, .pdf, "Adobe PDF File"5245474544495434, .reg, ""7B5C727466, .rtf, "Rich Text Format File"lh, .lzh, "Lz compression file"MThd, .mid, ""0A050108, .pcx, ""25215053, .eps, "Adobe EPS File"2112, .ain, "AIN Archive File"1A02, .arc, "ARC/PKPAK Compressed 1"1A03, .arc, "ARC/PKPAK Compressed 2"1A04, .arc, "ARC/PKPAK Compressed 3"1A08, .arc, "ARC/PKPAK Compressed 4"1A09, .arc, "ARC/PKPAK Compressed 5"60EA, .arj, "ARJ Compressed"41564920, .avi, "Audio Video Interleave (AVI)"425A68, .bz;.bz2, "Bzip Archive"49536328, .cab, "Cabinet File"4C01, .obj, "Compiled Object Module"303730373037, .tar;.cpio, "CPIO Archive File"4352555348, .cru;.crush, "CRUSH Archive File"3ADE68B1, .dcx, "DCX Graphic File"1F8B, .gz;.tar;.tgz, "Gzip Archive File"91334846, .hap, "HAP Archive File"3C68746D6C3E, .htm;.html, "HyperText Markup Language 1"3C48544D4C3E, .htm;.html, "HyperText Markup Language 2"3C21444F4354, .htm;.html, "HyperText Markup Language 3"100, .ico, "ICON File"5F27A889, .jar, "JAR Archive File"2D6C68352D, .lha, "LHA Compressed"20006040600, .wk1;.wks, "Lotus 123 v1 Worksheet"00001A0007800100, .fm3, "Lotus 123 v3 FMT file"00001A0000100400, .wk3, "Lotus 123 v3 Worksheet" 20006800200, .fmt, "Lotus 123 v4 FMT file"00001A0002100400, .wk4, "Lotus 123 v5"5B7665725D, .ami, "Lotus Ami Pro"300000041505052, .adx, "Lotus Approach ADX file"1A0000030000, .nsf;.ntf, "Lotus Notes Database/Template"4D47582069747064, .ds4, "Micrografix Designer 4"4D534346, .cab, "Microsoft CAB File Format"4D546864, .mid, "Midi Audio File"000001B3, .mpg;.mpeg, "MPEG Movie"0902060000001000B9045C00, .xls, "MS Excel v2" 0904060000001000F6055C00, .xls, "MS Excel v4"7FFE340A, .doc, "MS Word"1234567890FF, .doc, "MS Word 6.0"31BE000000AB0000, .doc, "MS Word for DOS 6.0"1A00000300001100, .nsf, "Notes Database"7E424B00, .psp, "PaintShop Pro Image File"504B0304, .zip, "PKZIP Compressed"89504E470D0A, .png, "PNG Image File"6D646174, .mov, "QuickTime Movie"6D646174, .qt, "Quicktime Movie File"52617221, .rar, "RAR Archive File"2E7261FD, .ra;.ram, "Real Audio File"EDABEEDB, .rpm, "RPM Archive File"2E736E64, .au, "SoundMachine Audio File"53495421, .sit, "Stuffit v1 Archive File"53747566664974, .sit, "Stuffit v5 Archive File"1F9D, .z, "TAR Compressed Archive File"49492A, .tif;.tiff, "TIFF (Intel)"4D4D2A, .tif;.tiff, "TIFF (Motorola)"554641, .ufa, "UFA Archive File"57415645666D74, .wav, "Wave Files"D7CDC69A, .wmf, "Windows Meta File"4C000000, .lnk, "Windows Shortcut (Link File)"504B3030504B0304, .zip, "WINZIP Compressed"FF575047, .wpg, "WordPerfect Graphics"FF575043, .wp, "WordPerfect v5 or v6"3C3F786D6C, .xml, "XML Document"FFFE3C0052004F004F0054005300540055004200, .xml, "XML Document (ROOTSTUB)"3C21454E54495459, .dtd, "XML DTD"5A4F4F20, .zoo, "ZOO Archive File"通过文件头标识判断图片格式最近在做东西的时候遇到了点问题,在加载图片的时候,加载失败,后缀都是jpg格式,但换个图片就可以了,为此,怀疑图片格式有问题,遂拖到UE里面查看它的16进制,果然,两个图片的文件头根本就不一样,这不是欺负人嘛,害我白白浪费了半天的时间,差点要重新编译内核。
所有类型文件的文件头标志
各类文件的文件头标志1、从Ultra-edit-32中提取出来的JPEG (jpg),文件头:FFD8FFPNG (png),文件头:89504E47GIF (gif),文件头:47494638TIFF (tif),文件头:49492A00Windows Bitmap (bmp),文件头:424DCAD (dwg),文件头:41433130Adobe Photoshop (psd),文件头:38425053Rich Text Format (rtf),文件头:7B5C727466XML (xml),文件头:3C3F786D6CHTML (html),文件头:68746D6C3EEmail [thorough only] (eml),文件头:44656C69766572792D646174653A Outlook Express (dbx),文件头:CFAD12FEC5FD746FOutlook (pst),文件头:2142444EMS Word/Excel (xls.or.doc),文件头:D0CF11E0MS Access (mdb),文件头:5374616E64617264204AWordPerfect (wpd),文件头:FF575043Postscript (eps.or.ps),文件头:252150532D41646F6265Adobe Acrobat (pdf),文件头:255044462D312EQuicken (qdf),文件头:AC9EBD8FWindows Password (pwl),文件头:E3828596ZIP Archive (zip),文件头:504B0304RAR Archive (rar),文件头:52617221Wave (wav),文件头:57415645AVI (avi),文件头:41564920Real Audio (ram),文件头:2E7261FDReal Media (rm),文件头:2E524D46MPEG (mpg),文件头:000001BAMPEG (mpg),文件头:000001B3Quicktime (mov),文件头:6D6F6F76Windows Media (asf),文件头:3026B2758E66CF11 MIDI (mid),文件头:4D5468642、从winhex中取出的文件头列表File Type ExtensionsHeaderJPEG jpg;jpeg 0xFFD8FFPNG png 0x89504E470D0A1A0AGIF gif GIF8TIFF tif;tiff 0x49492A00TIFF tif;tiff 0x4D4D002ABit map bmp BMAOL ART art 0x4A47040E000000AOL ART art 0x4A47030E000000PC Paintbrush pcx 0x0A050108Graphics Metafile wmf 0xD7CDC69AGraphics Metafile wmf 0x01000900Graphics Metafile wmf 0x02000900Enhanced Metafile emf 0x0100000058000000Corel Draw cdr CDRCAD dwg 0x41433130Adobe Photoshop psd 8BPSRich Text Format rtf rtfXML xmlHTML html;htm;php;php3;php4;phtml;shtml typeEmail eml Delivery-date:Outlook Express dbx 0xCFAD12FEOutlookpst!BDNMS Office/OLE2 doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db 0xD0CF11E0A1B11AE1MS Access mdb;mda;mde;mdt Standard JWordPerfect wpd 0xFF575043OpenOffice Writer sxw writerOpenOffice Calc sxc calcOpenOffice Math sxm mathOpenOffice Impress sxi impressOpenOffice Draw sxd drawAdobe FrameMaker fm <MAKERFILEPostScript eps.or.ps;ps;eps %!PS-AdobeAdobe Acrobat pdf %PDF-1.Quicken qdf 0xAC9EBD8FQuickBooks Backup qbb 0x458600000600Sage sly.or.srt.or.slt;sly;srt;slt 0x53520100Sage Backup 1 SAGEBACKUPLotus WordPro v9 lwp 0x576F726450726FLotus 123 v9 123 0x00001A00051004Lotus 123 v5 wk4 0x00001A0002100400Lotus 123 v3 wk3 0x00001A0000100400Lotus 123 v1 wk1 0x2000604060Windows Password pwl 0xE3828596ZIP Archive zip;jar 0x504B0304ZIP Archive (outdated) zip 0x504B3030RAR Archive rar Rar!GZ Archive gz;tgz 0x1F8B08BZIP Archive bz2 BZhARJ Archive arj 0x60EA7-ZIP Archive 7z 7z集'Wave wav WAVEAVI avi AVIReal Audio ram;ra .ra?0Real Media rm .RMFMPEG mpg;mpeg 0x000001BAMPEG mpg;mpeg 0x000001B3Quicktime mov moovWindows Media asf 0x3026B2758E66CF11MIDI mid MThdWin32 Executable exe;dll;drv;vxd;sys;ocx;vbx MZWin16 Executable exe;dll;drv;vxd;sys;ocx;vbx MZELF Executable elf;; 0x7F454C4601010100各种文件类型文件头标志位详细列表FFD8FFFE00, .JPEG;.JPE;.JPG, "JPG Graphic File"FFD8FFE000, .JPEG;.JPE;.JPG, "JPG Graphic File"474946383961, .gif, "GIF 89A"474946383761, .gif, "GIF 87A"424D, .bmp, "Windows Bitmap"4D5A, .exe;.com;.386;.ax;.acm;.sys;.dll;.drv;.flt;.fon;.ocx;.scr;.lrc;.v xd;.cpl;.x32, "Executable File"504B0304, .zip, "Zip Compressed"3A42617365, .cnt, ""D0CF11E0A1B11AE1, .doc;.xls;.xlt;.ppt;.apr, "MS Compound Document v1 or Lotus Approach APR file"0100000058000000, .emf, ""03000000C466C456, .evt, ""3F5F0300, .gid;.hlp;.lhp, "Windows Help File"1F8B08, .gz, "GZ Compressed File"28546869732066696C65, .hqx, ""0000010000, .ico, "Icon File"4C000000011402, .lnk, "Windows Link File"25504446, .pdf, "Adobe PDF File"5245474544495434, .reg, ""7B5C727466, .rtf, "Rich Text Format File"lh, .lzh, "Lz compression file"MThd, .mid, ""0A050108, .pcx, ""25215053, .eps, "Adobe EPS File"2112, .ain, "AIN Archive File"1A02, .arc, "ARC/PKPAK Compressed 1"1A03, .arc, "ARC/PKPAK Compressed 2"1A04, .arc, "ARC/PKPAK Compressed 3"1A08, .arc, "ARC/PKPAK Compressed 4"1A09, .arc, "ARC/PKPAK Compressed 5"60EA, .arj, "ARJ Compressed"41564920, .avi, "Audio Video Interleave (AVI)"425A68, .bz;.bz2, "Bzip Archive"49536328, .cab, "Cabinet File"4C01, .obj, "Compiled Object Module"303730373037, .tar;.cpio, "CPIO Archive File" 4352555348, .cru;.crush, "CRUSH Archive File"3ADE68B1, .dcx, "DCX Graphic File"1F8B, .gz;.tar;.tgz, "Gzip Archive File"91334846, .hap, "HAP Archive File"3C68746D6C3E, .htm;.html, "HyperText Markup Language 1" 3C48544D4C3E, .htm;.html, "HyperText Markup Language 2" 3C21444F4354, .htm;.html, "HyperText Markup Language 3"100, .ico, "ICON File"5F27A889, .jar, "JAR Archive File"2D6C68352D, .lha, "LHA Compressed"20006040600, .wk1;.wks, "Lotus 123 v1 Worksheet"00001A0007800100, .fm3, "Lotus 123 v3 FMT file"00001A0000100400, .wk3, "Lotus 123 v3 Worksheet" 20006800200, .fmt, "Lotus 123 v4 FMT file"00001A0002100400, .wk4, "Lotus 123 v5"5B7665725D, .ami, "Lotus Ami Pro"300000041505052, .adx, "Lotus Approach ADX file"1A0000030000, .nsf;.ntf, "Lotus Notes Database/Template" 4D47582069747064, .ds4, "Micrografix Designer 4"4D534346, .cab, "Microsoft CAB File Format"4D546864, .mid, "Midi Audio File"000001B3, .mpg;.mpeg, "MPEG Movie"0902060000001000B9045C00, .xls, "MS Excel v2" 0904060000001000F6055C00, .xls, "MS Excel v4"7FFE340A, .doc, "MS Word"1234567890FF, .doc, "MS Word 6.0"31BE000000AB0000, .doc, "MS Word for DOS 6.0"1A00000300001100, .nsf, "Notes Database"7E424B00, .psp, "PaintShop Pro Image File"504B0304, .zip, "PKZIP Compressed"89504E470D0A, .png, "PNG Image File"6D646174, .mov, "QuickTime Movie"6D646174, .qt, "Quicktime Movie File"52617221, .rar, "RAR Archive File"2E7261FD, .ra;.ram, "Real Audio File"EDABEEDB, .rpm, "RPM Archive File"2E736E64, .au, "SoundMachine Audio File"53495421, .sit, "Stuffit v1 Archive File"53747566664974, .sit, "Stuffit v5 Archive File"1F9D, .z, "TAR Compressed Archive File"49492A, .tif;.tiff, "TIFF (Intel)"4D4D2A, .tif;.tiff, "TIFF (Motorola)"554641, .ufa, "UFA Archive File"57415645666D74, .wav, "Wave Files"D7CDC69A, .wmf, "Windows Meta File"4C000000, .lnk, "Windows Shortcut (Link File)"504B3030504B0304, .zip, "WINZIP Compressed"FF575047, .wpg, "WordPerfect Graphics"FF575043, .wp, "WordPerfect v5 or v6"3C3F786D6C, .xml, "XML Document"FFFE3C0052004F004F0054005300540055004200, .xml, "XML Document (ROOTSTUB)" 3C21454E54495459, .dtd, "XML DTD"5A4F4F20, .zoo, "ZOO Archive File"通过文件头标识判断图片格式最近在做东西的时候遇到了点问题,在加载图片的时候,加载失败,后缀都是jpg格式,但换个图片就可以了,为此,怀疑图片格式有问题,遂拖到UE里面查看它的16进制,果然,两个图片的文件头根本就不一样,这不是欺负人嘛,害我白白浪费了半天的时间,差点要重新编译内核。
JAVA根据文件头判断文件类型(持续更新)
JAVA根据⽂件头判断⽂件类型(持续更新) 举个例⼦,⼀张jpg格式的图⽚直接修改后缀名为png也可以打开,但当⼀些⽅法需要调⽤后缀为png格式图⽚的时候,再使⽤这个⽂件,则会出现报错。
是因为这张图⽚的本质没有变,他还是个png格式的⽂件。
那么,该如何去掉⽂件名的伪装,拿到⽂件的真实格式呢? 使⽤java.io包中的FileInputStream类。
通过读取原始字节流,根据字节流头部获取到⽂件格式。
从⽽判断⼀个⽂件是否被修改过。
下⾯提供⼀个可⾏⽅法// file path String path = "";File file = new File(path);FileInputStream fs = new FileInputStream(file);// 具体需要多⼤的数组要根据具体⽂件来判断,这⾥先定义⼤⼩为10,⼤部分⽂件定义3够⽤byte[] b = new byte[10];fs.read(b,0,b.length);String suffix = checkFileType(bytesToHexString(b)); 这⾥给出⼀个讲数组转换成为⼗六进制字符串的⽅法public static String bytesToHexString(byte[] b){StringBuilder stringBuilder = new StringBuilder();if (src == null || src.length <= 0) {return null;}for (int i = 0; i < src.length; i++) {for (int v: b) {int v = src[i] & 0xFF;String hv = Integer.toHexString(v);if (hv.length() < 2) {stringBuilder.append(0);}stringBuilder.append(hv);}return stringBuilder.toString();}再定义⼀个枚举类点击查看代码public static String checkFileType(String x) {switch (x) {case "255044462d312e360d25":return "pdf";case "e69292e58f91e8bebee6":return "txt";case "d0cf11e0a1b11ae10000":return "doc,ppt,xls";case "504b0304140006000800":return "docx,xlsx";case "504b03040a0000000000":return "pptx,jar";case "89504e470d0a1a0a0000":return "png";case "ffd8ffe000104a464946":return "jpg,jpeg";case "47494638396126026f01":return "gif";case "49492a00227105008037":return "tif,tiff";//16位⾊图case "424d228c010*********":return "bmp";//24位⾊图case "424d8240090000000000":return "bmp";//256位⾊图case "424d8e1be30000000000":return "bmp";case "3c21444f435459504520":return "html";case "526172211a0700cf9073":return "rar";case "504b0304140000000800":return "zip";case "235468697320636f6e66":return "ini";case "4d5a9000030000000400":return "exe";case "49443303000000002176":return "mp3";case "49443303000000034839":return "mp3";case "00000020667479706973":return "mp4";case "000001ba210001000180":return "mpg";case "3026b2758e66cf11a6d9":return "wmv,asf";case "52494646d07d60074156":return "avi";case "464c5601050000000900":return "flv,f4v";case "4d546864000000060001":return "mid,midi";default:return "0000";}}View Code后续还会补充各种各样的⽂件类型。
文件类型识别方法-概述说明以及解释
文件类型识别方法-概述说明以及解释1.引言1.1 概述概述部分的内容可以按照以下方式编写:概述部分旨在简要介绍文件类型识别方法的背景和意义。
随着信息技术的快速发展和互联网的广泛应用,人们处理和共享的文件类型越来越多样化。
正确地识别文件类型对于信息安全、数据管理和系统操作都至关重要。
然而,由于不同文件类型的具体结构和格式存在差异,人工手动分辨文件类型往往耗时且容易出错。
为了解决这一问题,文件类型识别方法应运而生。
文件类型识别是利用计算机技术和算法来自动识别给定文件的具体类型。
通过对文件的内容、扩展名、魔数(Magic Number)、元数据等进行分析和比对,文件类型识别方法可以有效区分不同文件类型,提高文件处理的效率和准确性。
本文将详细介绍几种常见的文件类型识别方法。
首先,会介绍基于文件内容的识别方法,通过分析文件的二进制数据来确定其类型。
其次,会讨论基于文件扩展名和元数据的识别方法,利用文件的命名约定和存储的附加信息来推测文件类型。
最后,则会探讨基于魔数的识别方法,通过读取文件的开头几个字节,识别其中特定的标志位从而确定文件类型。
本文旨在帮助读者全面了解文件类型识别方法,掌握其基本原理和常见应用场景。
通过对比和分析各种识别方法的优缺点,读者可以选择适合自己需求的文件类型识别方法,并将其应用到实际工作中,提高文件处理的效率和准确性。
通过本文的学习,读者可以更加深入地了解文件类型识别方法的工作原理和实际应用。
此外,本文还将对未来文件类型识别方法的发展进行展望,并总结整个文中的内容和观点,为读者提供一个全面的文件类型识别方法研究的视角。
1.2 文章结构本文主要介绍文件类型识别方法。
文章结构如下:引言部分首先对问题进行概述,说明文件类型识别的背景和重要性。
接着,介绍了本文的目的,即讨论不同的文件类型识别方法。
正文部分将着重介绍三种文件类型识别方法。
在2.1节中,将详细介绍文件类型识别方法1,包括其原理、步骤和应用领域。
通过文件头标识判断图片格式
通过文件头标识判断图片格式【总结】2010-05-21 09:45:42| 分类:默认分类| 标签:|举报|字号大中小订阅最近在做东西的时候遇到了点问题,在加载图片的时候,加载失败,后缀都是jpg格式,但换个图片就可以了,为此,怀疑图片格式有问题,遂拖到UE 里面查看它的16进制,果然,两个图片的文件头根本就不一样,这不是欺负人嘛,害我白白浪费了半天的时间,差点要重新编译内核。
然后到网上找了一些资料,查看不同格式图片的文件头是怎样的。
下面转帖是不同图片的文件头标志:图片的格式很多,一个图片文件的后缀名并不能说明这个图片的真正格式什么,那么如何获取图片的格式呢?我想到了几个简单但有效的方法,那就是读取图片文件的文件头标识。
我们知道各种格式的图片的文件头标识识不同的,因此我们可以通过判断文件头的标识来识别图片格式。
我对各种格式的图片文件头标识进行了分析,不仅查找资料,也用十六进制编辑器察看过图片的文件头,以下是我收集、分析的结果,供大家参考。
1.JPEG/JPG- 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识)- 文件结束标识 (2 bytes): $ff, $d9 (EOI)2.TGA- 未压缩的前5字节 00 00 02 00 00- RLE压缩的前5字节 00 00 10 00 003.PNG- 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A4.GIF- 文件头标识 (6 bytes) 47 49 46 38 39(37) 61G I F 8 9 (7) a5.BMP- 文件头标识 (2 bytes) 42 4DB M6.PCX- 文件头标识 (1 bytes) 0A7.TIFF- 文件头标识 (2 bytes) 4D 4D 或 49 498.ICO- 文件头标识 (8 bytes) 00 00 01 00 01 00 20 209.CUR- 文件头标识 (8 bytes) 00 00 02 00 01 00 20 2010.IFF- 文件头标识 (4 bytes) 46 4F 52 4DF O R M11.ANI- 文件头标识 (4 bytes) 52 49 46 46R I F F根据这些文件头标识的收集,我可以写一个识别图像格式的模块了。
所有类型文件的文件头标志
各类文件的文件头标志1、从Ultra —edit-32 中提取出来的JPEG (jpg),文件头:FFD8FFPNG (png),文件头:89504E47GIF (gif),文件头:47494638TIFF (tif),文件头:49492A00Windows Bitmap (bmp),文件头:424DCAD (dwg),文件头:41433130Adobe Photoshop (psd),文件头:38425053Rich Text Format (rtf) ,文件头:7B5C727466XML (xml),文件头:3C3F786D6CHTML (html),文件头:68746D6C3EEmail [thorough on ly] (eml) ,文件头:44656C69766572792D646174653A Outlook Express (dbx),文件头:CFAD12FEC5FD746FOutlook (pst),文件头:2142444EMS Word/Excel (xls.or.doc) ,文件头:D0CF11E0MS Access (mdb),文件头:5374616E64617264204AWordPerfect (wpd),文件头:FF575043Postscript (eps.or.ps) ,文件头:252150532D41646F6265Adobe Acrobat (pdf),文件头:255044462D312EQuicke n (qdf),文件头:AC9EBD8FWindows Password (pwl),文件头:E3828596ZIP Archive (zip) ,文件头:504B0304RAR Archive (rar),文件头:52617221Wave (wav),文件头:57415645AVI (avi),文件头:41564920Real Audio (ram),文件头:2E726 仆DReal Media (rm),文件头:2E524D46MPEG (mpg)文件头:000001BAMPEG (mpg)文件头:000001B3Quicktime (mov),文件头:6D6F6F76Win dows Media (asf),文件头:3026B2758E66CF11 MIDI (mid),文件头:4D5468642、从win hex中取出的文件头列表File Type Exte nsion sHeaderJPEG jpg;jpeg 0xFFD8FFPNG png 0x89504E470D0A1A0AGIF gif GIF8TIFF tif;tiff 0x49492A00TIFF tif;tiff 0x4D4D002ABit map bmp BMAOL ART art 0x4A47040E000000AOL ART art 0x4A47030E000000PC Pain tbrush pcx 0x0A050108Graphics Metafile wmf 0xD7CDC69AGraphics Metafile wmf 0x01000900Graphics Metafile wmf 0x02000900Enhan ced Metafile emf 0x0100000058000000Corel Draw cdr CDRCAD dwg 0x41433130Adobe Photoshop psd 8BPSRich Text Format rtf rtfXML xmlHTML html;htm;php;php3;php4;phtml;shtml typeEmail eml Delivery-date:Outlook Express dbx 0xCFAD12FEOutlookpst!BDNMS Office/OLE2 doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db 0xD0CF11E0A1B11AE1MS Access mdb;mda;mde;mdt Stan dard JWordPerfect wpd 0xFF575043Ope nO ffice Writer sxw writerOpe nO ffice Calc sxc calcOpe nO ffice Math sxm mathOpe nO ffice Impress sxi impressOpe nO ffice Draw sxd drawAdobe FrameMaker fm vMAKERFILEPostScript eps.or.ps;ps;eps %!PS-AdobeAdobe Acrobat pdf %PDF-1.Quicke n qdf 0xAC9EBD8FQuickBooks Backup qbb 0x458600000600Sage sly.or.srt.or.slt;sly;srt;slt 0x53520100Sage Backup 1 SAGEBACKUPLotus WordPro v9 Iwp 0x576F726450726F Lotus 123 v9 123 0x00001A00051004Lotus 123 v5 wk4 0x00001A0002100400Lotus 123 v3 wk3 0x00001A0000100400Lotus 123 v1 wk1 0x2000604060Win dows Password pwl 0xE3828596ZIP Archive zip;jar 0x504B0304ZIP Archive (outdated) zip 0x504B3030RAR Archive rar Rar!GZ Archive gz;tgz 0x1F8B08BZIP Archive bz2 BZhARJ Archive arj 0x60EA7-ZIP Archive 7z 7z 集'Wave wav WAVEAVI avi AVIReal Audio ram;ra .ra?0Real Media rm 只MFMPEG mpg;mpeg 0x000001BAMPEG mpg;mpeg 0x000001B3Quicktime mov moovWin dows Media asf 0x3026B2758E66CF11 MIDI mid MThdWin32 Executable exe;dll;drv;vxd;sys;ocx;vbx MZWin16 Executable exe;dll;drv;vxd;sys;ocx;vbx MZELF Executable elf;; 0x7F454C4601010100各种文件类型文件头标志位详细列表FFD8FFFE00, .JPEG;.JPE;.JPG, "JPG Graphic File"FFD8FFE000, .JPEG;.JPE;.JPG, "JPG Graphic File"474946383961, .gif, "GIF 89A"474946383761, .gif, "GIF 87A"424D, .bmp, "Win dows Bitmap"4D5A, .exe;.com;.386;.ax;.acm;.sys;.dll;.drv;.flt;.fo n;.ocx;.scr; .l rc;.vxd;.cpl;.x32, "Executable File"504B0304, .zip, "Zip Compressed"3A42617365, .cnt,""D0CF11E0A1B11AE1, .doc;.xls;.xlt;.ppt;.apr, "MS Compou nd Docume nt v1 or Lotus Approach APR file"0100000058000000, .emf,""03000000C466C456, .evt,""3F5F0300, .gid;.hlp;.lhp, "Win dows Help File"1F8B08, .gz, "GZ Compressed File"28546869732066696C65, .hqx,""0000010000, .ico, "Icon File"4C000000011402, .lnk, "Windows Link File"25504446, .pdf, "Adobe PDF File" 5245474544495434, .reg,7B5C727466, .rtf, "Rich Text Format File"Ih,」zh, "Lz compressi on file"MThd, .mid,""0A050108, .pcx,""25215053, .eps, "Adobe EPS File"2112, .ain, "AIN Archive File"1A02, .arc, "ARC/PKPAK Compressed 1"1A03, .arc, "ARC/PKPAK Compressed 2"1A04, .arc, "ARC/PKPAK Compressed 3"1A08, .arc, "ARC/PKPAK Compressed 4"1A09, .arc, "ARC/PKPAK Compressed 5"60EA, .arj, "ARJ Compressed"41564920, .avi, "Audio Video In terleave (AVI)"425A68, .bz;.bz2, "Bzip Archive"49536328, .cab, "Cabinet File"4C01, .obj, "Compiled Object Module"303730373037, .tar;.cpio, "CPIO Archive File"4352555348, .cru;.crush, "CRUSH Archive File"3ADE68B1, .dcx, "DCX Graphic File"1F8B, .g z; .tar;.tg z, "Gzip Archive File"91334846, .hap, "HAP Archive File"3C68746D6C3E, .htm;.html, "HyperText Markup Lan guage 1"3C48544D4C3E, .htm;.html, "HyperText Markup Lan guage 2"3C21444F4354, .htm;.html, "HyperText Markup Lan guage 3" 100, .ico, "ICON File"2D6C68352D,」ha, "LHA Compressed"20006040600, .wk1;.wks, "Lotus 123 v1 Worksheet"00001A0007800100, .fm3, "Lotus 123 v3 FMT file"00001A0000100400, .wk3, "Lotus 123 v3 Worksheet"20006800200, .fmt, "Lotus 123 v4 FMT file"00001A0002100400, .wk4, "Lotus 123 v5"5B7665725D, .ami, "Lotus Ami Pro"300000041505052, .adx, "Lotus Approach ADX file"1A0000030000, .nsf;.ntf, "Lotus Notes Database/Template"4D47582069747064, .ds4, "Micrografix Desig ner 4"4D534346, .cab, "Microsoft CAB File Format"4D546864, .mid, "Midi Audio File"000001B3, .mpg;.mpeg, "MPEG Movie"0902060000001000B9045C00, .xls, "MS Excel v2"0904060000001000F6055C00, .xls, "MS Excel v4"7FFE340A, .doc, "MS Word"1234567890FF, .doc, "MS Word 6.0"31BE000000AB0000, .doc, "MS Word for DOS 6.0"1A00000300001100, .nsf, "Notes Database"7E424B00, .psp, "Pa in tShop Pro Image File"504B0304, .zip, "PKZIP Compressed" 89504E470D0A, .png, "PNG Image File" 6D646174, .mov, "QuickTime Movie"6D646174, .qt, "Quicktime Movie File"2E7261FD, .ra;.ram, "Real Audio File"EDABEEDB, .rpm, "RPM Archive File"2E736E64, .au, "Sou ndMachi ne Audio File"53495421, .sit, "Stuffit v1 Archive File"53747566664974, .sit, "Stuffit v5 Archive File"1F9D, .z, "TAR Compressed Archive File"49492A, .tif;.tiff, "TIFF (In tel)"4D4D2A, .tif;.tiff, "TIFF (Motorola)"554641, .ufa, "UFA Archive File"57415645666D74, .wav, "Wave Files"D7CDC69A, .wmf, "Win dows Meta File"4C000000, .1nk, "Win dows Shortcut (Li nk File)"504B3030504B0304, .zip, "WINZIP Compressed"FF575047, .wpg, "WordPerfect Graphics"FF575043, .wp, "WordPerfect v5 or v6"3C3F786D6C, .xml, "XML Docume nt"FFFE3C0052004F004F0054005300540055004200, .xml, "XML Docume nt (ROOTSTUB)"3C21454E54495459, .dtd, "XML DTD"5A4F4F20, .zoo, "ZOO Archive File"通过文件头标识判断图片格式最近在做东西的时候遇到了点问题,在加载图片的时候,加载失败,后缀都是jpg格式,但换个图片就可以了,为此,怀疑图片格式有问题,遂拖到UE里面查看它的16进制,果然,两个图片的文件头根本就不一样,这不是欺负人嘛,害我白白浪费了半天的时间,差点要重新编译内核。
WindowsC++判断文件是否是图片格式的方法。
WindowsC++判断⽂件是否是图⽚格式的⽅法。
⼀、通过后缀名去判断。
bool IsImageByTail(const std::wstring &path){std::wstring file_exten;size_t pos = path.rfind(L'.');if (pos == std::wstring::npos)return false;file_exten = path.substr(pos, std::wstring::npos);//把file_exten转⼩写for (size_t u = 0; u < file_exten.length();u++){if (file_exten[u] >= L'A' && file_exten[u]<='Z'){file_exten[u] += L'a' - L'A';}}if (file_exten == L".jpg" || file_exten == L".tif"|| file_exten == L".png" || file_exten == L".bmp"|| file_exten == L".gif" || file_exten == L".ico")return true;return false;}优点:效率快,不⽤读取整个⽂件,⽆依赖,理解简单。
缺点:不准确,⽤户可以通过修改后缀名蒙混过关。
⼆、通过⽂件头判断我们知道,图⽚⽂件的⽂件头带有图⽚标记信息,常见的如下:JPEG (jpg),⽂件头:FFD8FFPNG (png),⽂件头:89504E47GIF (gif),⽂件头:47494638TIFF (tif),⽂件头:49492A00Windows Bitmap (bmp),⽂件头:424Dbool IsImageByHead(const std::wstring &path){//读取⽂件⾸部4个字节HANDLE hFile = CreateFile(path.c_str(), FILE_GENERIC_READ, // 打开⽂件,获得⽂件读句柄FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, // 共享⽅式打开,避免其他地⽅需要读写此⽂件NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (INVALID_HANDLE_VALUE == hFile) // ⽂件打开失败,返回错误值return false;BYTE data[4] = { 0 };DWORD readSize;bool ok=false;if(ReadFile(hFile, data, 4, &readSize, NULL)){if (readSize == 4){if (data[0] == 0xFF && data[1]==0xD8 && data[2]==0xFF){ok = true;}else if (data[0] == 0x89 && data[1] == 0x50 && data[2] == 0x4E && data[3] == 0x47){ok = true;}else if (data[0] == 0x47 && data[1] == 0x49 && data[2] == 0x46 && data[3] == 0x38){ok = true;}else if (data[0] == 0x49 && data[1] == 0x49 && data[2] == 0x2A && data[3] == 0x00){ok = true;}else if (data[0] == 0x42 && data[1] == 0x4D){ok = true;}}}CloseHandle(hFile); // 关闭⽂件句柄,避免句柄泄露return ok;}优点:只需要⽂件读取函数,实现逻辑较简单。
根据文件头判断图像格式及尺寸
根据文件头判断图像格式及尺寸作者:zealot 2012-06 本文总结了JPEG、BMP、PNG、GIF这4种常见网络图像的特征码及尺寸在头部的存储结构。
并附关键代码C#实现。
一、特征码1.1 特征码长度:JPEG,JPG: 2BMP: 2PNG: 8GIF: 61.2 特征码(注:JPG是JPEG的缩写;GIF有87a和89a两种格式):JPEG,JPG: 0xFF 0xD8BMP: 0x42 0x4DPNG: 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0AGIF: 0x47 0x49 0x46 0x38 0x39/0x37 0x61因此,读取图像文件最长8个字节,就可判断4种类型图像文件。
二、根据图像文件格式,获取图像尺寸说明:byte[] h是文件头数组;HL表示一个字节高位在前,LH表示一个字节低位在前;Bytes2Int函数是把用HL或LH一个或多个字节表示的尺寸转换成整数(像素);用Point 结构存储尺寸信息,Point.X存储图像宽度,Point.Y存储图像高度。
2.1 Bytes2Int函数(重载)private static int Bytes2Int(byte H, byte L, bool IsLowHigh){if (IsLowHigh){return Convert.ToInt32(L.ToString("X2") + H.ToString("X2"), 16);}else{return Convert.ToInt32(H.ToString("X2") + L.ToString("X2"), 16);}}private static int Bytes2Int(byte HH, byte HL, byte LH, byte LL, bool IsLowHigh){if (IsLowHigh){return Convert.ToInt32(LL.ToString("X2")+LH.ToString("X2")+HL.ToString("X2") + HH.ToString("X2"), 16);else{return Convert.ToInt32(HH.ToString("X2") + HL.ToString("X2") + LH.ToString("X2") + LL.ToString("X2"), 16);}}2.2 JPEG格式private static Point GetJpegSize(byte[] h){/*SOF0 = 0xFF 0xC0......SOF15 = 0xFF 0xCFOffset = 5Height = 2 bytes, HLWidth = 2 bytes, HL*/Point size = new Point(0,0);for (byte j = 0xC0; j <= 0xCF; j++){for (int i = 0; i < h.Length - 8; i++){if (h[i] == 0xFF && h[i + 1] == j){size.Y = Bytes2Int(h[i + 5], h[i + 6], false); //heightsize.X = Bytes2Int(h[i + 7], h[i + 8], false); //widthreturn size;}}}return size;}2.3 BMP格式private static Point GetBmpSize(byte[] h){/*Width = h[18],h[19],h[20],h[21], LHHeight = h[22],h[23],h[24],h[25], LH*/Point size = new Point(0, 0);if (h.Length > 25)size.X = Bytes2Int(h[18], h[19], h[20], h[21], true);size.Y = Bytes2Int(h[22], h[23], h[24], h[25], true);}return size;}2.4 PNG格式private static Point GetPngSize(byte[] h){/*IHDR=0x49 0x48 0x44 0x52Offset = 4Width = 4 bytes, HLHeight = 4 bytes, HL*/Point size = new Point(0,0);for (int i = 0; i < h.Length - 11; i++){if (h[i] == 0x49 && h[i + 1] == 0x48 && h[i + 2] == 0x44 && h[i + 3] == 0x52){size.X = Bytes2Int(h[i + 4], h[i + 5], h[i + 6], h[i + 7], false); //widthsize.Y = Bytes2Int(h[i + 8], h[i + 9], h[i + 10], h[i + 11], false); //heightbreak;}}return size;}2.5 GIF格式private static Point GetGifSize(byte[] h){/*LSW = h[6],h[7], LHLSH = h[8],h[9], LH*/Point size = new Point(0, 0);if (h.Length > 9){size.X = Bytes2Int(h[6], h[7], true); //widthsize.Y = Bytes2Int(h[8], h[9], true); //height}return size;}三、应用本文所述技术可对网络图片进行读取,判断是否是所需的图片格式,进一步判断是否符合尺寸要求。
Nodejs识别图片类型的方法
Nodejs识别图⽚类型的⽅法通过切⽂件名称后缀来获得图⽚格式的⽅式是不准确的,因为⽂件后缀是可以被强⾏更改的,这样⼀个.gif 图⽚也可以被保存成.jpg,那么在 Node 上我们如何做⽂件类型的校验呢通过⽂件头标识判断图⽚格式其实很简单,每个图⽚⽂件都有⽂件头标识,各种格式的图⽚的⽂件头标识都是不⼀样,所以可以通过判断⽂件头的标识来识别图⽚格式。
通过在⽹上找资料,汇总了如下的图⽚⽂件头标识:1.JPEG/JPG - ⽂件头标识 (2 bytes): ff, d8 ⽂件结束标识 (2 bytes): ff, d92.TGA - 未压缩的前 5 字节 00 00 02 00 00 - RLE 压缩的前 5 字节 00 00 10 00 003.PNG - ⽂件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A4.GIF - ⽂件头标识 (6 bytes) 47 49 46 38 39(37) 615.BMP - ⽂件头标识 (2 bytes) 42 4D B M6.PCX - ⽂件头标识 (1 bytes) 0A7.TIFF - ⽂件头标识 (2 bytes) 4D 4D 或 49 498.ICO - ⽂件头标识 (8 bytes) 00 00 01 00 01 00 20 209.CUR - ⽂件头标识 (8 bytes) 00 00 02 00 01 00 20 2010.IFF - ⽂件头标识 (4 bytes) 46 4F 52 4D11.ANI - ⽂件头标识 (4 bytes) 52 49 46 46知识点: 1 字节(bytes) = 8 bits,上⾯的数字均为 16 进制也就占 4bits 空间,每两个 16 进制数字占⼀字节如何判断通过将图⽚资源的⼆进制流与该标识做⽐对,即可判断图⽚格式。
因为实现逻辑⾮常简单,具体的实现逻辑看代码和注释就就好,在这⾥贡献出来给⼤家参考,⽅便⼤家开发使⽤。
c++使用文件头判断文件类型的方法
C++ 是一种功能丰富的编程语言,它可以用于开发各种类型的应用程序,包括处理不同类型的文件。
文件处理是 C++ 程序中常见的任务之一,而判断文件类型则是文件处理中的一个重要环节。
在 C++ 中,可以使用文件头来判断文件类型,本文将介绍如何利用文件头来判断文件类型的方法。
一、文件头和文件类型的关系在计算机中,文件头是指文件的开始部分,它包含了文件的一些基本信息,如文件类型、文件大小、文件版本等。
不同类型的文件具有不同的文件头,通过分析文件头的内容,我们可以判断文件的类型。
在C++ 中,可以通过读取文件头的方式来判断文件类型,从而实现不同类型文件的处理。
二、使用文件头判断文件类型的方法1. 打开文件在 C++ 中,可以使用 ifstream 类来打开文件并读取文件头。
下面是一个简单的示例代码:```cpp#include <fstream>using namespace std;int m本人n() {ifstream file("test.txt", ios::binary);if(!file) {cout << "文件打开失败!" << endl;return 1;}return 0;}```2. 读取文件头打开文件后,我们可以使用 ifstream 的 read 函数来读取文件头的内容。
下面是一个示例代码:```cppchar header[8];file.read(header, sizeof(header));```这里我们定义了一个大小为 8 的字符数组 header,然后通过 read 函数从文件中读取 8 个字节的内容到这个数组中。
实际应用中,不同类型的文件通常具有不同大小的文件头,因此需要根据具体文件类型来确定读取的字节数。
3. 判断文件类型读取文件头后,我们就可以根据文件头的内容来判断文件类型了。
不同类型的文件具有不同的文件头格式,例如图片文件的文件头通常包含了一些特定的标识符,音频文件的文件头则包含了一些特定的数据等。
以文件头为ff d8为标准
以文件头为ff d8为标准文件头为“FF D8”是JPEG文件的标准文件头,它表示文件的开头是一个JPEG图像文件。
JPEG(Joint Photographic Experts Group)是一种广泛应用于图像压缩领域的标准。
JPEG格式被广泛用于数字摄影、网络传输、图像处理等各个领域。
JPEG格式是一种有损压缩格式,它通过牺牲一部分图像质量来实现较高的压缩比。
这种压缩方式使JPEG成为了图像传输和存储中的理想格式。
JPEG图像经过压缩后,文件大小会显著减小,节约了存储空间和传输带宽。
JPEG格式的优点之一是它可以根据需要选择不同的压缩率。
压缩率可以通过改变图像的质量参数来控制,质量参数越高,图像质量越好,但文件大小也会相应增大。
这使得JPEG格式成为了一种非常灵活的图像压缩格式,可以根据不同的应用需求进行调整。
JPEG文件的文件头“FF D8”是由两个十六进制数字组成的,每个数字占据一个字节的空间。
其中,“FF”表示文件的起始标识符,而“D8”则表示JPEG文件的核心标识符。
通过检查文件头的数值是否为“FF D8”,我们可以判断一个文件是否为JPEG格式的图像文件。
这个简单而直接的判断方式使得计算机能够快速地识别JPEG格式的图像文件,从而进行相应的处理。
除了文件头之外,JPEG格式还包含了一系列的数据结构和编码方式。
其中最重要的是图像压缩和解压缩算法。
JPEG采用了一种基于离散余弦变换(DCT)的压缩算法,该算法通过对图像的频域进行分析和编码,来实现对图像数据的压缩。
在解压缩时,JPEG格式使用反向DCT变换将压缩后的数据恢复为原始图像。
总的来说,JPEG格式是一种常见的图像压缩格式,具有较高的压缩比和灵活的调节参数,适用于各种不同的应用场景。
通过文件头为“FF D8”的检测方式,计算机可以迅速判断一个文件是否为JPEG格式的图像文件。
JPEG格式的广泛应用带来了图像处理和传输的便利,也为我们在数字摄影和多媒体领域带来了更多的可能性。
你会鉴定Raw格式照片真伪吗?学学
你会鉴定Raw格式照片真伪吗?学学不同相机拍的原始格式照片文件名后缀是不同的,一般统称为Raw格式,也就是原始格式。
本文谈谈怎么鉴定原始格式照片的真伪。
先看两张Raw格式照片,左边图少一头牛,右边图多一头牛,见红圈处,其余元素完全相同,亮度略有差异,只有一张是真的,猜猜是哪张?如果是jpg格式照片,是否被移花接木、改天换地等修改,除了专业经验判断,很难有软件标准去鉴定,也很难通过科技手段鉴定,尽管有很多高科技的算法、程序、模型,但还没有一种能够100%认定jpg格式照片里的场景是真是假,只能起辅助作用。
这也是很多摄影比赛的纪录类征集中要求必须提供照片原始格式文件的原因。
您可能会问:“都提供原始格式文件了,还鉴定什么呀?一对比不就知道了。
”原始格式的照片文件还能造假吗?还真能。
比如在Adobe Bridge中,可以修改原始拍摄时间。
很多比赛是要求拍摄时间的,有人可能会投机取巧。
原始拍摄时间是2014年,见红框。
Adobe Bridge中,直接点击原始拍摄时间,就弹出修改框,见下图,可以修改,比如修改为2019年。
成功修改了拍摄时间到2019年以佳能相机的原始格式.CR2为例,如果接着刚才修改拍摄时间之后在Camera Raw中打开的话,还可以修改抹掉一些不想要的元素,比如抹掉开篇图中的一头牛。
还可以做很多调整,之后在Camera Raw中直接存储为.dng格式照片,再简单通过重命名的方式把.dng直接修改为.CR2,一张看似为原始格式的照片文件就诞生了。
如果电脑水平再高一点,把电脑系统的时间改一改,连文件的修改时间都能按意图改变了。
这就需要鉴定了。
在Camera Raw中可直接存储为.dng格式照片鉴定起来也不难,做修改难免会留下痕迹。
通过仔细观察Adobe Bridge中元数据会发现痕迹。
左图为真的原始格式的元数据,右图为假的原始格式的元数据。
对比可以发现,假的原始文件属性中多了一个应用程序名:Adobe Photoshop Camera Raw 13.1(windows),这说明它被这个软件处理过,尽管原始日期时间由2014年成功地更改为2019年。
根据文件头数据判断文件类型
根据⽂件头数据判断⽂件类型现有⼀⽂件,其扩展名未知或标记错误。
假设它是⼀个正常的、⾮空的⽂件,且将扩展名更正后可以正常使⽤,那么,如何判断它是哪种类型的⽂件?在后缀未知,或者后缀被修改的⽂件,依然通过⽂件头来判断该⽂件究竟是什么⽂件类型。
我们可以使⽤⼀个⽂本编辑⼯具如UltraEdit打开⽂件(16进制模式下),然后看⽂件头是什么字符,以下是常见⽂件类型的⽂件头字符(16进制),希望对你有帮助:JPEG (jpg),⽂件头:FFD8FFPNG (png),⽂件头:89504E47GIF (gif),⽂件头:47494638TIFF (tif),⽂件头:49492A00Windows Bitmap (bmp),⽂件头:424DCAD (dwg),⽂件头:41433130Adobe Photoshop (psd),⽂件头:38425053Rich Text Format (rtf),⽂件头:7B5C727466XML (xml),⽂件头:3C3F786D6CHTML (html),⽂件头:68746D6C3EEmail [thorough only] (eml),⽂件头:44656C69766572792D646174653AOutlook Express (dbx),⽂件头:CFAD12FEC5FD746FOutlook (pst),⽂件头:2142444EMS Word/Excel (xls.or.doc),⽂件头:D0CF11E0MS Access (mdb),⽂件头:5374616E64617264204AWordPerfect (wpd),⽂件头:FF575043Postscript (eps.or.ps),⽂件头:252150532D41646F6265Adobe Acrobat (pdf),⽂件头:255044462D312EQuicken (qdf),⽂件头:AC9EBD8FWindows Password (pwl),⽂件头:E3828596ZIP Archive (zip),⽂件头:504B0304RAR Archive (rar),⽂件头:52617221Wave (wav),⽂件头:57415645AVI (avi),⽂件头:41564920Real Audio (ram),⽂件头:2E7261FDReal Media (rm),⽂件头:2E524D46MPEG (mpg),⽂件头:000001BAMPEG (mpg),⽂件头:000001B3Quicktime (mov),⽂件头:6D6F6F76Windows Media (asf),⽂件头:3026B2758E66CF11MIDI (mid),⽂件头:4D546864下⾯在提供⼀个⽹上使⽤java写的根据头⽂件码判断⽂件类型package com;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class FileType {public final static Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>();private FileType(){}static{getAllFileType(); //初始化⽂件类型信息}/*** Discription:[getAllFileType,常见⽂件头信息]*/private static void getAllFileType(){FILE_TYPE_MAP.put("ffd8ffe000104a464946", "jpg"); //JPEG (jpg)FILE_TYPE_MAP.put("89504e470d0a1a0a0000", "png"); //PNG (png)FILE_TYPE_MAP.put("47494638396126026f01", "gif"); //GIF (gif)FILE_TYPE_MAP.put("49492a00227105008037", "tif"); //TIFF (tif)FILE_TYPE_MAP.put("424d228c010*********", "bmp"); //16⾊位图(bmp)FILE_TYPE_MAP.put("424d8240090000000000", "bmp"); //24位位图(bmp)FILE_TYPE_MAP.put("424d8e1b030000000000", "bmp"); //256⾊位图(bmp)FILE_TYPE_MAP.put("41433130313500000000", "dwg"); //CAD (dwg)FILE_TYPE_MAP.put("3c21444f435459504520", "html"); //HTML (html)FILE_TYPE_MAP.put("3c21646f637479706520", "htm"); //HTM (htm)FILE_TYPE_MAP.put("48544d4c207b0d0a0942", "css"); //cssFILE_TYPE_MAP.put("696b2e71623d696b2e71", "js"); //jsFILE_TYPE_MAP.put("7b5c727466315c616e73", "rtf"); //Rich Text Format (rtf)FILE_TYPE_MAP.put("38425053000100000000", "psd"); //Photoshop (psd)FILE_TYPE_MAP.put("46726f6d3a203d3f6762", "eml"); //Email [Outlook Express 6] (eml)FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000", "doc"); //MS Excel 注意:word、msi 和 excel的⽂件头⼀样 FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000", "vsd"); //Visio 绘图FILE_TYPE_MAP.put("5374616E64617264204A", "mdb"); //MS Access (mdb)FILE_TYPE_MAP.put("252150532D41646F6265", "ps");FILE_TYPE_MAP.put("255044462d312e350d0a", "pdf"); //Adobe Acrobat (pdf)FILE_TYPE_MAP.put("2e524d46000000120001", "rmvb"); //rmvb/rm相同FILE_TYPE_MAP.put("464c5601050000000900", "flv"); //flv与f4v相同FILE_TYPE_MAP.put("00000020667479706d70", "mp4");FILE_TYPE_MAP.put("49443303000000002176", "mp3");FILE_TYPE_MAP.put("000001ba210001000180", "mpg"); //FILE_TYPE_MAP.put("3026b2758e66cf11a6d9", "wmv"); //wmv与asf相同FILE_TYPE_MAP.put("52494646e27807005741", "wav"); //Wave (wav)FILE_TYPE_MAP.put("52494646d07d60074156", "avi");FILE_TYPE_MAP.put("4d546864000000060001", "mid"); //MIDI (mid)FILE_TYPE_MAP.put("504b0304140000000800", "zip");FILE_TYPE_MAP.put("526172211a0700cf9073", "rar");FILE_TYPE_MAP.put("235468697320636f6e66", "ini");FILE_TYPE_MAP.put("504b03040a0000000000", "jar");FILE_TYPE_MAP.put("4d5a9000030000000400", "exe");//可执⾏⽂件FILE_TYPE_MAP.put("3c25402070616765206c", "jsp");//jsp⽂件FILE_TYPE_MAP.put("4d616e69666573742d56", "mf");//MF⽂件FILE_TYPE_MAP.put("3c3f786d6c2076657273", "xml");//xml⽂件FILE_TYPE_MAP.put("494e5345525420494e54", "sql");//xml⽂件FILE_TYPE_MAP.put("7061636b616765207765", "java");//java⽂件FILE_TYPE_MAP.put("406563686f206f66660d", "bat");//bat⽂件FILE_TYPE_MAP.put("1f8b0800000000000000", "gz");//gz⽂件FILE_TYPE_MAP.put("6c6f67346a2e726f6f74", "properties");//bat⽂件FILE_TYPE_MAP.put("cafebabe0000002e0041", "class");//bat⽂件FILE_TYPE_MAP.put("49545346030000006000", "chm");//bat⽂件FILE_TYPE_MAP.put("04000000010000001300", "mxp");//bat⽂件FILE_TYPE_MAP.put("504b0304140006000800", "docx");//docx⽂件FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000", "wps");//WPS⽂字wps、表格et、演⽰dps都是⼀样的FILE_TYPE_MAP.put("6431303a637265617465", "torrent");FILE_TYPE_MAP.put("6D6F6F76", "mov"); //Quicktime (mov)FILE_TYPE_MAP.put("FF575043", "wpd"); //WordPerfect (wpd)FILE_TYPE_MAP.put("CFAD12FEC5FD746F", "dbx"); //Outlook Express (dbx)FILE_TYPE_MAP.put("2142444E", "pst"); //Outlook (pst)FILE_TYPE_MAP.put("AC9EBD8F", "qdf"); //Quicken (qdf)FILE_TYPE_MAP.put("E3828596", "pwl"); //Windows Password (pwl)FILE_TYPE_MAP.put("2E7261FD", "ram"); //Real Audio (ram)}/*** 得到上传⽂件的⽂件头* @param src* @return*/public static String bytesToHexString(byte[] src) {StringBuilder stringBuilder = new StringBuilder();if (src == null || src.length <= 0) {return null;}for (int i = 0; i < src.length; i++) {int v = src[i] & 0xFF;String hv = Integer.toHexString(v);if (hv.length() < 2) {stringBuilder.append(0);}stringBuilder.append(hv);}return stringBuilder.toString();}/*** 根据制定⽂件的⽂件头判断其⽂件类型* @param filePaht* @return*/public static String getFileType(String filePaht){String res = null;try {FileInputStream is = new FileInputStream(filePaht);byte[] b = new byte[10];is.read(b, 0, b.length);String fileCode = bytesToHexString(b);System.out.println(fileCode);//这种⽅法在字典的头代码不够位数的时候可以⽤但是速度相对慢⼀点Iterator<String> keyIter = FILE_TYPE_MAP.keySet().iterator();while(keyIter.hasNext()){String key = keyIter.next();if(key.toLowerCase().startsWith(fileCode.toLowerCase()) || fileCode.toLowerCase().startsWith(key.toLowerCase())){ res = FILE_TYPE_MAP.get(key);break;}}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return res;}public static void main(String[] args) throws Exception {String type = getFileType("C:/test/eee.WMV");System.out.println("eee.WMV : "+type);System.out.println();type = getFileType("C:/test/350996.wav");System.out.println("350996.wav : "+type);System.out.println();}}出处:/songylwq/article/details/6139753。
常见图片文件格式简析
常见图⽚⽂件格式简析“常见”:此处指BMP JPEG GIF PNG 四种。
软件:Windows 画图(除了Photoshop,我最喜欢的编辑器,简单粗暴)HxDBMPBMP⽂件分为4部分:bmp⽂件头(bmp file header):14Byte。
提供⽂件的格式、⼤⼩等信息。
位图信息头(bitmap information):40Byte。
提供图像数据的尺⼨、位平⾯数、压缩⽅式、颜⾊索引等信息。
调⾊板(color palette):⼤⼩由颜⾊索引数决定。
可选,如使⽤索引来表⽰图像,调⾊板就是索引与其对应的颜⾊的映射表。
位图数据(bitmap data):⼤⼩由图像尺⼨决定。
图像数据。
存储数据时,⼀个地址存储⼀字节。
如果⼀个数据需要⽤多个字节表⽰,就要跨地址,那么存储该数据的顺序就分为两种:⾼地址存储⾼位数据,低地址存储低位数据(⼩端⽅式,Little Endian,利于计算机处理);⾼地址存储低位数据,低地址存储⾼位数据(⼤端⽅式,Big Endian,和⼈类⼀般思维类似)。
BMP⽂件采⽤⼩端⽅式,⾼地址存储⾼位数据,低地址存储低位数据。
甩两个链接:⽂件头:变量名地址偏移⼤⼩作⽤bfType0000h 2 Bytes⽂件类型,BM:Windows 3.1x,95,NTBA,CI,CP,IC,PT:与 OS/2有关bfSize0002h 4 Bytes⽂件⼤⼩,单位BytebfReserved10006h 2 Bytes保留,必须为0bfReserved20008h 2 Bytes保留,必须为0bfOffBits000Ah 4 Bytes从⽂件头到位图数据的偏移量(Byte)。
由于调⾊板有⽆、长度不同,⽤于迅速从⽂件定位到位图数据。
以下,0d**** 为⼗进制(decimal),0x****⼗六进制(hexadecimal)。
两个16进制数可以写成8位2进制数,因此是1 Byte。
对于本图,42 4D :BM,Windows位图36 DB 01 00:⼩端⽅式,= 0x0001DB36 =0d121654(Byte) = 118 KiB。
图片类型判断
图片类型判断http get到的图片数据 jpg/gif/bmp/png,可以通过一些方法来判断图片类型首先是可以通过Content-Type字段来判断,image/gif,image/png等。
标示的很详细。
但是这里的内容是web server填进去的,不能保证其准确性。
而且验证一下可以发现,即使标示错了,很多浏览器还是能正确识别data中的图片,对图片浏览没什么影响。
这也意味着如果你遇到一个不靠谱的网站,比如apache或者iis 没配好,这个Content-Type就不可信比较靠谱的方法是读取data内容,根据各种图片标准来判断图片类型。
一般可以区别图片类型的标记都在图片数据的头部。
所以判断起来并不麻烦:png: 前几个字段会出现0x89 0x50 0x4e 0x47 0x0d 0x0a 0x1a 0x0a。
显示出来是什么什么PNG[plain] view plaincopyprint?1.ryanhe@Tencent:~> hexdump -C main.png | head -n 12.00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|jpg: 头部是0xFF 0xD8。
有的文章说jpg文件尾部一定是0xFF 0xD9,结果被骗了...程序跑的时候发现尾部不一定可信,挂掉很多jpg图...查看wiki文档,Magic number是ffd8...总之还是以头部判断为主[plain] view plaincopyprint?1.ryanhe@Tencent:~> hexdump -C bg.jpg | head -n 12.00000000 ff d8 ff e0 00 10 4a 46 49 46 00 01 02 00 00 6 4 |......JFIF.....d|gif: 头部是GIF89a,或者GIF87a[plain] view plaincopyprint?1.ryanhe@Tencent:~> hexdump -C main.gif | head -n 12.00000000 47 49 46 38 39 61 00 04 00 03 f7 00 00 00 00 00 |GIF89a..........|bmg: 头部是0x42 0x4D[plain] view plaincopyprint?1.ryanhe@Tencent:~/board_develop/front/public> hexdum p -C main.bmp | head -n 12.00000000 42 4d 36 00 24 00 00 00 00 00 36 00 00 00 28 00 |BM6.$.....6...(.|这样判断靠谱一点..。
png文件格式分析
png⽂件格式分析png⽂件格式分析写在前⾯在写这个东西写到⼀半的时候,突然发现CTFWiki已经有这篇相对正规的⽂章了。
对PNG⽂件格式的分析⽹上相对⽐较多,所以分析的⽐较菜,表哥们轻喷。
PNG⽂件结构PNG⽂件格式PNG⽂件格式很简单,对于⼀个PNG⽂件来说,主要是开头固定的字节(⼜叫做⽂件头,⽂件署名域,标识符等等)和三组以上的PNG数据块按照特定的顺序组成,其中,最基本的PNG⾄少包含以下部分:⽂件头 IHDR IDAT IEND其中,⽂件头的hex为:89 50 4E 47 0D 0A 1A 0A这⼀部分主要是考察对各类媒体类型(mime type)的识别⽐较多。
重要的是,正确判断⼀个图⽚的⽂件格式⼗分重要,如 GIF ⾥⾯有帧信息,⽽JPG ⾥⾯却没有,PNG 图⽚有通道信息,⽽ JPG 也没有。
单凭后缀进⾏错判会导致处理的时候⽂件报错。
(补充:)同时由于⽂件种类多⽽复杂,通过背诵⽂件头实现对应图⽚⽂件格式便显得⼗分困难。
根据⽹上资料可知,python库中存在imghdr模块可以直接识别⽂件,同⽬录下命令⾏⾥敲⼊指令:python -m imghdr file1即可识别,结果会返回⽂件格式。
PNG数据块(Chunk)PNG定义了两种类型的数据块:关键数据块(critical chunk),是标准的数据块;辅助数据块(ancillary chunks),是可选的数据块。
关键数据块定义了四个标准数据块。
分别是IHDR、PLTE、IDAT、IEND,后⾯我们会分别提⼀下这四块。
其中PLTE仅与索引彩⾊图像有关,在⿊⽩PNG图⽚是作为可选数据块存在的,但是本⾝是标准数据块之⼀。
对于每⼀个数据块,其数据结构⼜是统⼀的,每个数据块由Length(4bytes,指定数据块数据域的长度),Chunk Type Code(4bytes,数据块类型码,由ASCII字母组成), Chunk Data(数据块数据,储存按照CTC指定的数据),CRC(4byte,循环冗余检测,检测是否有错误的循环冗余码)组成。
图像文件头解析
文件在计算机中是以二进制存放的,文本、图像、音频、视频对于计算机来说都是一段二进制数字。
那计算机怎么来区分这些不同类型的文件呢?首先是通过文件的扩展名,但文件可以没有扩展名,而且扩展名也不一定与文件类型匹配,例如把一个txt文件扩展名改为bmp后,它还是一个文本文件而不是图片。
其实大多文件的类型信息都存储在文件开头的一段二进制中,计算机程序通过这些信息判断出文件的类型,进行后续的操作。
具体到图像部分,图像又分为多种类型,如.bmp .jpg .gif .tiff等。
这些不同的类型就是通过文件开头的二进制信息来区分的。
下面举例来看一下:lena.bmp用二进制文件查看器打开,左侧为16进制形式,两位对应一个字节,右侧为每个字节对应的字符:我们看到.bmp格式的图像开头的二进制对应的内容是BM,这是位图格式文件的统一规定。
其实每一种文件都有自己的标识,用于区别于其它文件类型,当开发一种新的文件类型时,就要设计一套之前没有过的标识。
在文件类型确定后,BM后面的一部分文件头信息用于描述这种类型的文件。
其中前几位的用处如下:typedef struct tagBITMAPFILEHEADER{WORD bfType;//位图文件的类型,必须为BM(1-2字节)DWORD bfSize;//位图文件的大小,以字节为单位(3-6字节,低位在前)WORD bfReserved1;//位图文件保留字,必须为0(7-8字节)WORD bfReserved2;//位图文件保留字,必须为0(9-10字节)DWORD bfOffBits;//位图数据的起始位置,以相对于位图(11-14字节,低位在前)//文件头的偏移量表示,以字节为单位}BITMAPFILEHEADER;具体.bmp文件头部还包含什么信息,可以参考百度。
下面我们再来看一下.jpg格式的文件:lena.jpg十六进制形式为:我们看到.jpg与.bmp格式的图像文件头信息差别很大,表示的信息也不同,所以读取时也要区别对待。
常用图片后缀格式识别常识
一、BMP格式BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。
随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。
这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点--占用磁盘空间过大。
所以,目前BMP在单机上比较流行。
二、GIF格式GIF是英文Graphics Interchange Format(图形交换格式)的缩写。
顾名思义,这种格式是用来交换图片的。
事实上也是如此,上世纪80年代,美国一家著名的在线信息服务机构CompuServe针对当时网络传输带宽的限制,开发出了这种GIF图像格式。
GIF格式的特点是压缩比高,磁盘空间占用较少,所以这种图像格式迅速得到了广泛的应用。
最初的GIF只是简单地用来存储单幅静止图像(称为GIF87a),后来随着技术发展,可以同时存储若干幅静止图象进而形成连续的动画,使之成为当时支持2D动画为数不多的格式之一(称为GIF89a),而在GIF89a图像中可指定透明区域,使图像具有非同一般的显示效果,这更使GIF风光十足。
目前Internet上大量采用的彩色动画文件多为这种格式的文件,也称为GIF89a格式文件。
此外,考虑到网络传输中的实际情况,GIF图像格式还增加了渐显方式,也就是说,在图像传输过程中,用户可以先看到图像的大致轮廓,然后随着传输过程的继续而逐步看清图像中的细节部分,从而适应了用户的"从朦胧到清楚"的观赏心理。
目前Internet上大量采用的彩色动画文件多为这种格式的文件。
但GIF有个小小的缺点,即不能存储超过256色的图像。
尽管如此,这种格式仍在网络上大行其道应用,这和GIF图像文件短小、下载速度快、可用许多具有同样大小的图像文件组成动画等优势是分不开的。
三、JPEG格式JPEG也是常见的一种图像格式,它由联合照片专家组(Joint Photographic Experts Group)开发并以命名为"ISO 10918-1",JPEG仅仅是一种俗称而已。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通过文件头标识判断图片格式【总结】
2010-05-21 09:45:42| 分类:默认分类| 标签:|举报|字号大中小订阅最近在做东西的时候遇到了点问题,在加载图片的时候,加载失败,后缀
都是jpg格式,但换个图片就可以了,为此,怀疑图片格式有问题,遂拖到UE 里面查看它的16进制,果然,两个图片的文件头根本就不一样,这不是欺负人嘛,害我白白浪费了半天的时间,差点要重新编译内核。
然后到网上找了一些资料,查看不同格式图片的文件头是怎样的。
下面转帖是不同图片的文件头标志:
图片的格式很多,一个图片文件的后缀名并不能说明这个图片的真正格式什么,那么如何获取图片的格式呢?我想到了几个简单但有效的方法,那就是读取图片文件的文件头标识。
我们知道各种格式的图片的文件头标识识不同的,因此我们可以通过判断文件头的标识来识别图片格式。
我对各种格式的图片文件头标识进行了分析,不仅查找资料,也用十六进制编辑器察看过图片的文件头,以下是我收集、分析的结果,供大家参考。
1.JPEG/JPG
- 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识)
- 文件结束标识 (2 bytes): $ff, $d9 (EOI)
2.TGA
- 未压缩的前5字节 00 00 02 00 00
- RLE压缩的前5字节 00 00 10 00 00
3.PNG
- 文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A
4.GIF
- 文件头标识 (6 bytes) 47 49 46 38 39(37) 61
G I F 8 9 (7) a
5.BMP
- 文件头标识 (2 bytes) 42 4D
B M
6.PCX
- 文件头标识 (1 bytes) 0A
7.TIFF
- 文件头标识 (2 bytes) 4D 4D 或 49 49
8.ICO
- 文件头标识 (8 bytes) 00 00 01 00 01 00 20 20
9.CUR
- 文件头标识 (8 bytes) 00 00 02 00 01 00 20 20
10.IFF
- 文件头标识 (4 bytes) 46 4F 52 4D
F O R M
11.ANI
- 文件头标识 (4 bytes) 52 49 46 46
R I F F
根据这些文件头标识的收集,我可以写一个识别图像格式的模块了。
但是
在写这个模块之前可以对收集到的文件头标识进行优化,使得程序中字符串比对次数尽量的少。
1.JPEG我们知需要比对文件头的$ff, $d8这两个字符,而不用读取最后的两个结束标识了。
2.TGA,ICO,CUR只需比对第三个与第五个字符即可。
3.PNG比对[89][50]这两个字符。
4.GIF比对[47][49][46]与第五个字符。
废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件是什么类型的文件,例如
jpg文件是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样)
BMP文件是 424D ---4D42
其他的我就不一一列举了,想知道跟多文件类型分别是用什么字符作为文件的开头的话,下载个C32asm或者UE等这类16进制编辑器就可以看到。