1、使用函数exif_imagetype获取图像的类型
语法:exif_imagetype(string filename)
参数说明:
filename——图像文件的名称
返回值:对应图像的常量,如果该函数在读取到的第一个字节里没有找到图像的签名,返回FALSE。
exif_imagetype()返回值对应的图像类型常量
值 | 常量 |
1 | IMAGETYPE_GIF |
2 | IMAGETYPE_JPEG |
3 | IMAGETYPE_PNG |
4 | IMAGETYPE_SWF |
5 | IMAGETYPE_PSD |
6 | IMAGETYPE_BMP |
7 | IMAGETYPE_TITF_II(Intel 字节顺序) |
8 | IMAGETYPE_TIFF_MM(Motorola字 节顺序) |
9 | IMAGETYPE_JPG |
10 | IMAGETYPE_JP2 |
11 | IMAGETYPE_JPX |
12 | IMAGETYPE_JB2 |
13 | IMAGETYPE_SWC |
14 | IMAGETYPE_IFF |
15 | IMAGETYPE_WBMP |
16 | IMAGETYPE_XBM |
下面使用exif_imagetype()函数简单判断一个图像类型是否为gif、jpg和png图像类型。
<?php /* 如果要使用exif_imagetype前,必须在配置文件php.ini里打开以下两个模块, extension=php_mbstring.dll和extension=php_exif.dll。 */ //使用函数exif_imagetype获取图像的类型 header("Content-type:text/html;charset=utf-8"); //$filename="first.gif"; //$filename="second.jpg"; $filename="three.png"; if(exif_imagetype($filename)==IMAGETYPE_GIF){ echo "{$filename}格式:GIF"; }elseif(exif_imagetype($filename)==IMAGETYPE_JPEG){ echo "{$filename}格式:JPEG"; }elseif(exif_imagetype($filename)==IMAGETYPE_PNG){ echo "{$filename}格式:PNG"; }else{ echo "其他格式"; } ?>
测试结果:
当文件名为$filename="first.gif"时,浏览器输出:first.gif格式:GIF
当文件名为$filename="second.jpg"时,浏览器输出:second.jpg格式:JPEG
当文件名为$filename="three.png"时,浏览器输出:three.pngf格式:PNG
2、使用函数getimagetsize()获取图像的类型
语法:array getimagesize(string filename [,array &imageinfo])
参数说明:
filename——指定的图像名称
返回值:
返回一个具有四个单元的数组。
索引0包含图像宽度的像素值
索引1包含图像高度的像素值
索引2包含图像类型的标记:1=GIF,2=JPG,3=PNG,4=SWF...共16钟图像类型
索引3是文本字符串,内容为"height=高度 width=宽度",可直接用于IMG标记
<?php //getimagesize获取图像信息 //该函数不仅可以获取图像的大小,还可以获取图像的格式类型 header("Content-type:text/html;charset=utf-8"); //$filename="first.gif"; //$filename="second.jpg"; $filename="three.png"; $arr=getimagesize($filename); //var_dump($arr); /* array(7) { [0]=> int(740) //图片宽度 [1]=> int(254) //图片高度 [2]=> int(1) //图片类型:1对应gif [3]=> string(24) "width="740" height="254"" //文本字符串 ["bits"]=> //图像的每种颜色的位数,二进制格式 int(8) ["channels"]=> //图像的通道值,RGB图像默认是3 int(3) ["mime"]=> //图像的MIME信息,此信息可用在HTTP Content-type头信息中发送正确的信息,如header("Content-type:image/gif") string(9) "image/gif" } */ switch($arr[2]){ case 1: $type="gif"; break; case 2: $type="jpeg"; break; case 3: $type="png"; break; default: $type="other type"; } echo "图像类型为:".$type; /* 输出结果: 当$filename="first.gif" ,结果为:图像类型为:gif 当$filename="second.jpg" ,结果为:图像类型为:jpeg 当$filename="three.png" ,结果为:图像类型为:png */ ?>
3、通过函数strrchr()获取文件名的后缀名
<?php //把文件名当作字符串来处理 //文件后缀即为图片类型 //strrchr()函数查找字符串在另一个字符串中最后一次出现的位置,并返回该位置到字符串结尾的所有字符 header("Content-type:text/html;charset=utf-8"); //$filename="first.gif"; //$filename="second.jpg"; $filename="three.png"; $type=strrchr($filename,'.'); echo "图片类型为:".$type; /* 结果: 当$filename="first.gif"时,结果:图片类型为:.gif 当$filename="second.jpg"时,结果:图片类型为:.jpg 当$filename="three.png"时,结果:图片类型为:.png */ ?>
4、通过函数strrpos()获取文件名的后缀
<?php //把文件名当作字符串来处理 //文件后缀即为图片类型 //strrpos()函数查找字符串在另一个字符串中最后一次出现的位置,并返回该位置到字符串结尾的所有字符 header("Content-type:text/html;charset=utf-8"); //$filename="first.gif"; //$filename="second.jpg"; $filename="three.png"; $type=substr($filename,strrpos($filename,'.')); echo "图片类型为:".$type; /* 结果: 当$filename="first.gif"时,结果:图片类型为:gif 当$filename="second.jpg"时,结果:图片类型为:jpg 当$filename="three.png"时,结果:图片类型为:png */ ?>
5、通过函数explode()获取图片类型
<?php //把文件名当作字符串来处理 //explode()分割字符串,最后一个键值即为图片类型 header("Content-type:text/html;charset=utf-8"); //$filename="first.gif"; //$filename="second.jpg"; $filename="three.png"; //$type=@end(explode(".",$filename)); //end函数用来将数组的内部指针指向最后一个单元,并返回数组的最后一个值 $arr=explode(".",$filename); $type=array_pop($arr); echo "图片类型为:".$type; /* 结果: 当$filename="first.gif"时,结果:图片类型为:gif 当$filename="second.jpg"时,结果:图片类型为:jpg 当$filename="three.png"时,结果:图片类型为:png */ ?>
6、通过函数pathinfo()函数获取图片类型
<?php //把图片路径当作文件路径,那么这里就需要gd类库函数或者php文件函数 //函数pathinfo()以数组的形式返回文件路径的信息 //返回一个关联数组包含有path的信息 //语法:pathinfo(string $path [,$options=PATHINFO_DIRNAME|PATHINFO_BASENAME|PATHINFO_EXTENSION|PATHINFO_FILENAME]) //如果指定了options,将会返回指定元素,包括PATHINFO_DIRNAME、PATHINFO_BASENAME和PATHINFO_EXTENSION或PATHINFO_FILENAME //如果没有指定options,默认是返回全部的单元 //返回值,如果没有传入options,将会返回包括以下单元的数组array:dirname、basenmae和extension(如果有),以及filename header("Content-type:text/html;charset=utf-8"); $filename="first.gif"; //$filename="second.jpg"; //$filename="three.png"; $type=pathinfo($filename,PATHINFO_EXTENSION); echo "图片类型为:".$type; /* 结果: 当$filename="first.gif"时,结果:图片类型为:gif 当$filename="second.jpg"时,结果:图片类型为:jpg 当$filename="three.png"时,结果:图片类型为:png */ ?>
小结:
主流使用第3种方法获取图片类型,但是从安全角度来考虑,避免别人伪造文件名,推荐使用第2种方法。