圖片格式查看:
用十六進制編輯器察看過圖片的文件頭,分析的結果,供大家參考:
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
gif89a 有透明
gif87a 無透明
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
附:常見文件的文件頭標識
255044 PDF
526563 EML
D0CF11 PPT
4D5AEE COM
E93B03 COM
4D5A90 EXE
424D3E BMP
49492A TIF
384250 PSD
C5D0D3 EPS
0A0501 PCS
89504E PNG
060500 RAW
000002 TGA
60EA27 ARJ
526172 RAR
504B03 ZIP
495363 CAB
1F9D8C Z
524946 WAV
435753 SWF
3026B2 WMV
3026B2 WMA
2E524D RM
00000F MOV
000077 MOV
000001 MPA
FFFB50 MP3
234558 m3u
3C2144 HTM
FFFE3C XSL
3C3F78 XML
3C3F78 MSC
4C0000 LNK
495453 CHM
805343 scm
D0CF11 XLS
31BE00 WRI
00FFFF MDF
4D4544 MDS
5B436C CCD
00FFFF IMG
FFFFFF SUB
17A150 PCB
2A5052 ECO
526563 PPC
000100 DDB
42494C LDB
2A7665 SCH
2A2420 LIB
434841 FNT
7B5C72 RTF
7B5072 GTD
234445 PRG
000007 PJT
202020 BAS
000002 TAG
4D5A90 dll
4D5A90 OCX
4D5A50 DPL
3F5F03 HLP
4D5A90 OLB
4D5A90 IMM
4D5A90 IME
3F5F03 LHP
C22020 NLS
5B5769 CPX
4D5A16 DRV
5B4144 PBK
24536F PLL
4E4553 NES
87F53E GBC
00FFFF SMD
584245 XBE
005001 XMV
000100 TTF
484802 PDG
000100 TST
414331 dwg
D0CF11 max
另外還有一些重要的文件,沒有固定的文件頭,如下:
TXT 沒固定文件頭定義
TMP 沒固定文件頭定義
INI 沒固定文件頭定義
BIN 沒固定文件頭定義
DBF 沒固定文件頭定義
C 沒沒固定文件頭定義
CPP 沒固定文件頭定義
H 沒固定文件頭定義
BAT 沒固定文件頭定義
還有一些不同的文件有相同的文件頭,最典型的就是下面:
4D5A90 EXE
4D5A90 dll
4D5A90 OCX
4D5A90 OLB
4D5A90 IMM
4D5A90 IME
附網上例子
根據二進制流獲取圖片類型
public function getFileType($file,&$fileType,&$mime){
$bin = substr($file,0,2);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
switch ($typeCode)
{
case 7790:
$fileType = 'exe';
return false;
break;
case 7784:
$fileType = 'midi';
return false;
break;
case 8297:
$fileType = 'rar';
return false;
break;
case 255216:
$fileType = 'jpg';
$mime = 'image/jpeg';
return true;
break;
case 7173:
$fileType = 'gif';
$mime = 'image/gif';
return true;
break;
case 6677:
$fileType = 'bmp';
$mime = 'image/bmp';
return true;
break;
case 13780:
$fileType = 'png';
$mime = 'image/png';
return true;
break;
default:
return false;
break;
}
return false;
}
mmime type:
ime.ez=application/andrew-inset
mime.csm=application/cu-seeme
mime.cu=application/cu-seeme
mime.tsp=application/dsptype
mime.spl=application/futuresplash
mime.hta=application/hta
mime.cpt=application/mac-compactpro
mime.hqx=application/mac-binhex40
mime.nb=application/mathematica
mime.mdb=application/msaccess
mime.doc=application/msword
mime.dot=application/msword
mime.bin=application/octet-stream
mime.oda=application/oda
mime.ogg=application/ogg
mime.prf=application/pics-rules
mime.key=application/pgp-keys
mime.pdf=application/pdf
mime.pgp=application/pgp-signature
mime.ps=application/postscript
mime.ai=application/postscript
mime.eps=application/postscript
mime.rss=application/rss+xml
mime.rtf=application/rtf
mime.smi=application/smil
mime.smil=application/smil
mime.wp5=application/wordperfect5.1
mime.xht=application/xhtml+xml
mime.xhtml=application/xhtml+xml
mime.zip=application/zip
mime.cdy=application/vnd.cinderella
mime.mif=application/vnd.mif
mime.xls=application/vnd.ms-excel
mime.xlb=application/vnd.ms-excel
mime.cat=application/vnd.ms-pki.seccat
mime.stl=application/vnd.ms-pki.stl
mime.ppt=application/vnd.ms-powerpoint
mime.pps=application/vnd.ms-powerpoint
mime.pot=application/vnd.ms-powerpoint
mime.sdc=application/vnd.stardivision.calc
mime.sda=application/vnd.stardivision.draw
mime.sdd=application/vnd.stardivision.impress
mime.sdp=application/vnd.stardivision.impress
mime.smf=application/vnd.stardivision.math
mime.sdw=application/vnd.stardivision.writer
mime.vor=application/vnd.stardivision.writer
mime.sgl=application/vnd.stardivision.writer-global
mime.sxc=application/vnd.sun.xml.calc
mime.stc=application/vnd.sun.xml.calc.template
mime.sxd=application/vnd.sun.xml.draw
mime.std=application/vnd.sun.xml.draw.template
mime.sxi=application/vnd.sun.xml.impress
mime.sti=application/vnd.sun.xml.impress.template
mime.sxm=application/vnd.sun.xml.math
mime.sxw=application/vnd.sun.xml.writer
mime.sxg=application/vnd.sun.xml.writer.global
mime.stw=application/vnd.sun.xml.writer.template
mime.sis=application/vnd.symbian.install
mime.wbxml=application/vnd.wap.wbxml
mime.wmlc=application/vnd.wap.wmlc
mime.wmlsc=application/vnd.wap.wmlscriptc
mime.wk=application/x-123
mime.dmg=application/x-apple-diskimage
mime.bcpio=application/x-bcpio
mime.torrent=application/x-bittorrent
mime.cdf=application/x-cdf
mime.vcd=application/x-cdlink
mime.pgn=application/x-chess-pgn
mime.cpio=application/x-cpio
mime.csh=application/x-csh
mime.deb=application/x-debian-package
mime.dcr=application/x-director
mime.dir=application/x-director
mime.dxr=application/x-director
mime.wad=application/x-doom
mime.dms=application/x-dms
mime.dvi=application/x-dvi
mime.pfa=application/x-font
mime.pfb=application/x-font
mime.gsf=application/x-font
mime.pcf=application/x-font
mime.pcf.Z=application/x-font
mime.spl=application/x-futuresplash
mime.gnumeric=application/x-gnumeric
mime.sgf=application/x-go-sgf
mime.gcf=application/x-graphing-calculator
mime.gtar=application/x-gtar
mime.tgz=application/x-gtar
mime.taz=application/x-gtar
mime.hdf=application/x-hdf
mime.phtml=application/x-httpd-php
mime.pht=application/x-httpd-php
mime.php=application/x-httpd-php
mime.phps=application/x-httpd-php-source
mime.php3=application/x-httpd-php3
mime.php3p=application/x-httpd-php3-preprocessed
mime.php4=application/x-httpd-php4
mime.ica=application/x-ica
mime.ins=application/x-internet-signup
mime.isp=application/x-internet-signup
mime.iii=application/x-iphone
mime.jar=application/x-java-archive
mime.jnlp=application/x-java-jnlp-file
mime.ser=application/x-java-serialized-object
mime.class=application/x-java-vm
mime.js=application/x-javascript
mime.chrt=application/x-kchart
mime.kil=application/x-killustrator
mime.kpr=application/x-kpresenter
mime.kpt=application/x-kpresenter
mime.skp=application/x-koan
mime.skd=application/x-koan
mime.skt=application/x-koan
mime.skm=application/x-koan
mime.ksp=application/x-kspread
mime.kwd=application/x-kword
mime.kwt=application/x-kword
mime.latex=application/x-latex
mime.lha=application/x-lha
mime.lzh=application/x-lzh
mime.lzx=application/x-lzx
mime.frm=application/x-maker
mime.maker=application/x-maker
mime.frame=application/x-maker
mime.fm=application/x-maker
mime.fb=application/x-maker
mime.book=application/x-maker
mime.fbdoc=application/x-maker
mime.mif=application/x-mif
mime.wmz=application/x-ms-wmz
mime.wmd=application/x-ms-wmd
mime.com=application/x-msdos-program
mime.exe=application/x-msdos-program
mime.bat=application/x-msdos-program
mime.dll=application/x-msdos-program
mime.msi=application/x-msi
mime.nc=application/x-netcdf
mime.pac=application/x-ns-proxy-autoconfig
mime.nwc=application/x-nwc
mime.o=application/x-object
mime.oza=application/x-oz-application
mime.pl=application/x-perl
mime.pm=application/x-perl
mime.p7r=application/x-pkcs7-certreqresp
mime.crl=application/x-pkcs7-crl
mime.qtl=application/x-quicktimeplayer
mime.rpm=application/x-redhat-package-manager
mime.shar=application/x-shar
mime.swf=application/x-shockwave-flash
mime.swfl=application/x-shockwave-flash
mime.sh=application/x-sh
mime.sit=application/x-stuffit
mime.sv4cpio=application/x-sv4cpio
mime.sv4crc=application/x-sv4crc
mime.tar=application/x-tar
mime.tcl=application/x-tcl
mime.tex=application/x-tex
mime.gf=application/x-tex-gf
mime.pk=application/x-tex-pk
mime.texinfo=application/x-texinfo
mime.texi=application/x-texinfo
mime.~=application/x-trash
mime.%=application/x-trash
mime.bak=application/x-trash
mime.old=application/x-trash
mime.sik=application/x-trash
mime.t=application/x-troff
mime.tr=application/x-troff
mime.roff=application/x-troff
mime.man=application/x-troff-man
mime.me=application/x-troff-me
mime.ms=application/x-troff-ms
mime.ustar=application/x-ustar
mime.src=application/x-wais-source
mime.wz=application/x-wingz
mime.crt=application/x-x509-ca-cert
mime.fig=application/x-xfig
mime.au=audio/basic
mime.snd=audio/basic
mime.mid=audio/midi
mime.midi=audio/midi
mime.kar=audio/midi
mime.mpga=audio/mpeg
mime.mpega=audio/mpeg
mime.mp2=audio/mpeg
mime.mp3=audio/mpeg
mime.m3u=audio/mpegurl
mime.sid=audio/prs.sid
mime.aif=audio/x-aiff
mime.aiff=audio/x-aiff
mime.aifc=audio/x-aiff
mime.gsm=audio/x-gsm
mime.m3u=audio/x-mpegurl
mime.wma=audio/x-ms-wma
mime.wax=audio/x-ms-wax
mime.rpm=audio/x-pn-realaudio-plugin
mime.ra=audio/x-pn-realaudio
mime.rm=audio/x-pn-realaudio
mime.ram=audio/x-pn-realaudio
mime.ra=audio/x-realaudio
mime.pls=audio/x-scpls
mime.sd2=audio/x-sd2
mime.wav=audio/x-wav
mime.pdb=chemical/x-pdb
mime.xyz=chemical/x-xyz
mime.bmp=image/bmp
mime.gif=image/gif
mime.ief=image/ief
mime.jpeg=image/jpeg
mime.jpg=image/jpeg
mime.jpe=image/jpeg
mime.pcx=image/pcx
mime.png=image/png
mime.svg=image/svg+xml
mime.svgz=image/svg+xml
mime.tiff=image/tiff
mime.tif=image/tiff
mime.wbmp=image/vnd.wap.wbmp
mime.ras=image/x-cmu-raster
mime.cdr=image/x-coreldraw
mime.pat=image/x-coreldrawpattern
mime.cdt=image/x-coreldrawtemplate
mime.cpt=image/x-corelphotopaint
mime.djvu=image/x-djvu
mime.djv=image/x-djvu
mime.ico=image/x-icon
mime.art=image/x-jg
mime.jng=image/x-jng
mime.bmp=image/x-ms-bmp
mime.psd=image/x-photoshop
mime.pnm=image/x-portable-anymap
mime.pbm=image/x-portable-bitmap
mime.pgm=image/x-portable-graymap
mime.ppm=image/x-portable-pixmap
mime.rgb=image/x-rgb
mime.xbm=image/x-xbitmap
mime.xpm=image/x-xpixmap
mime.xwd=image/x-xwindowdump
mime.igs=model/iges
mime.iges=model/iges
mime.msh=model/mesh
mime.mesh=model/mesh
mime.silo=model/mesh
mime.wrl=model/vrml
mime.vrml=model/vrml
mime.csv=text/comma-separated-values
mime.css=text/css
mime.323=text/h323
mime.htm=text/html
mime.html=text/html
mime.uls=text/iuls
mime.mml=text/mathml
mime.asc=text/plain
mime.txt=text/plain
mime.text=text/plain
mime.diff=text/plain
mime.rtx=text/richtext
mime.rtf=text/rtf
mime.sct=text/scriptlet
mime.wsc=text/scriptlet
mime.tm=text/texmacs
mime.ts=text/texmacs
mime.tsv=text/tab-separated-values
mime.jad=text/vnd.sun.j2me.app-descriptor
mime.wml=text/vnd.wap.wml
mime.wmls=text/vnd.wap.wmlscript
mime.xml=text/xml
mime.xsl=text/xml
mime.h++=text/x-c++hdr
mime.hpp=text/x-c++hdr
mime.hxx=text/x-c++hdr
mime.hh=text/x-c++hdr
mime.c++=text/x-c++src
mime.cpp=text/x-c++src
mime.cxx=text/x-c++src
mime.cc=text/x-c++src
mime.h=text/x-chdr
mime.csh=text/x-csh
mime.c=text/x-csrc
mime.java=text/x-java
mime.moc=text/x-moc
mime.p=text/x-pascal
mime.pas=text/x-pascal
mime.***=text/x-pcs-***
mime.shtml=text/x-server-parsed-html
mime.etx=text/x-setext
mime.sh=text/x-sh
mime.tcl=text/x-tcl
mime.tk=text/x-tcl
mime.tex=text/x-tex
mime.ltx=text/x-tex
mime.sty=text/x-tex
mime.cls=text/x-tex
mime.vcs=text/x-vcalendar
mime.vcf=text/x-vcard
mime.dl=video/dl
mime.fli=video/fli
mime.gl=video/gl
mime.mpeg=video/mpeg
mime.mpg=video/mpeg
mime.mpe=video/mpeg
mime.qt=video/quicktime
mime.mov=video/quicktime
mime.mxu=video/vnd.mpegurl
mime.dif=video/x-dv
mime.dv=video/x-dv
mime.lsf=video/x-la-asf
mime.lsx=video/x-la-asf
mime.mng=video/x-mng
mime.asf=video/x-ms-asf
mime.asx=video/x-ms-asf
mime.wm=video/x-ms-wm
mime.wmv=video/x-ms-wmv
mime.wmx=video/x-ms-wmx
mime.wvx=video/x-ms-wvx
mime.avi=video/x-msvideo
mime.movie=video/x-sgi-movie
mime.ice=x-conference/x-cooltalk
mime.vrm=x-world/x-vrml
mime.vrml=x-world/x-vrml
mime.wrl=x-world/x-vrml
參考:
http://www.cnblogs.com/jetlee/archive/2010/11/05/1870223.html
http://blog.sina.com.cn/s/blog_6bfe46bc0100q1bx.html
http://samver.blogbus.com/logs/60772235.html
http://www.garykessler.net/library/file_sigs.html