《PHP获取图片类型最佳综合函数》要点:
本文介绍了PHP获取图片类型最佳综合函数,希望对您有用。如果有疑问,可以联系我们。
相关主题:PHP开发
大家知道,以前,获取PHP图片类型,基本都是使用这个函数getimagesize()。但是在微信时代,对于微信图片,采集过来的图片,后缀是jpeg,实际是却是webp,
这样类型的图片不能用getimagesize函数获取图片信息。那有什么其它办法?
我们先来分析几个获取图片的函数:
1、finfo() 函数,这个函数需要fileinfo扩展。需要用fileinfo扩展。一般会取得“image/webp; charset=binary”信息。需要注意的是,上面说的webp就可以用它来分析。但是因为需要扩展组件才可以,所以你的服务器不一定能支持。但PHP5.3以上可能都有安装,所以还是挺普遍的。它的用法如:
$finfo = finfo_open(FILEINFO_MIME); $mimetype = finfo_file($finfo, $filename); finfo_close($finfo); #或用类的方式: $fi = new finfo(FILEINFO_MIME_TYPE); $mime_type = $fi->file($filename);
2、getimagesize函数:这个就不说了吧,老古董了。返回图片各种信息。
3、exif_imagetype(string filename)判断一个图像的类型,返回值和 getimagesize() 返回的数组中的索引 2 的值是一样的,但本函数快得多。 但本函数需要打开Exif扩展。不过,这个只是获取类型,还需要转化才能得到MIME。排除吧。
4、mime_content_type('a.jpg')函数判断获取mime类型,此函数已被丢弃,不能使用了。
5、使用自定义的函数,其实是从一堆已有的MIME列表中选一个的方法。
上面每个都各有所长,我们就整合一起吧,目的是为了跨平台应用,不致于程序换个系统就挂了。所以,兼容性很重要。
下面通用函数中,VEPHP_RESOURCE是维易PHP站全局路径常量,需要换成你自己的路径。
/** * 获取mime跨平台函数 * 来源:http://www.vephp.com 维易学院, * 分享请保持网址。尊重别人劳动成果。谢谢。 * * @param $filename 图片名 */ function get_mime_type($filename) { if(class_exists('finfo')){ $fi = new finfo(FILEINFO_MIME_TYPE); $mime_type = $fi->file($filename); return $mime_type; } $fileext = strtolower(trim(strrchr($filename,'.'), '.')); if(in_array($fileext, ['jpg','jpeg','png','gif','bmp'])){ $picInfo = getimagesize($filename); return $picInfo['mime']; #return image_type_to_mime_type(exif_imagetype($filename)); } if (empty($fileext)) return false; $regex = "/^([\w\+\-\.\/]+)\s+(\w+\s)*($fileext\s)/i"; $lines = file(VEPHP_RESOURCE."dict/mime.types"); foreach($lines as $line) { if (substr($line, 0, 1) == '#') continue; $line = rtrim($line) . " "; if (!preg_match($regex, $line, $matches)) continue; return ($matches[1]); } return (false); // no match at all }
函数中用到的MIME文件下载地址:
http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
转载请注明本页网址:
http://www.vephp.com/jiaocheng/14.html