检查图像文件类型

时间:2012-04-12 19:55:20

标签: php image file-type

我正在尝试向我的网站添加一个功能,用户可以将其个人资料图片设置为来自外部网址的图片,而不是将其保存到自己的电脑上,然后将其上传到我的服务器。

这是我到目前为止所提出的:

            $filename = $inputs['image_url'];

            if(getimagesize($filename)){
                // Get new dimensions
                list($width, $height) = getimagesize($filename);
                $new_width = 100;
                $new_height = 100;

                // Resample
                $image_p = imagecreatetruecolor($new_width, $new_height);                                           

                //a check needs to be done here $image = imagecreatefromjpeg($filename);
                imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

                $filename = "profile_pictures/". md5( uniqid(rand(),true) ).".jpg";

                imagejpeg($image_p,$filename,100);
            }else{
                echo 'This is not an image';
            }

代码可以很好地下载.jpg图像,但我也想支持其他文件类型。

我需要以某种方式检查图像的文件类型,以便我可以使用不同的文件类型保存其他图像......

                if($extension=="jpg" || $extension=="jpeg"){
                    $image = imagecreatefromjpeg($filename);
                }else if($extension=="png"){
                    image = imagecreatefrompng($filename);
                }else{
                    $image = imagecreatefromgif($filename);
                }

是否有人知道允许我这样做的功能?

提前感谢您的回复。

3 个答案:

答案 0 :(得分:2)

最直接的,对于GD兼容性检查,您可以从字符串创建它:

$image = imagecreatefromstring(file_get_contents($filename));

如果加载失败,您就知道无法处理该图像。

但同样请getimagesize,它也会检查文件类型,而不仅仅是宽度和高度:

list($width, $height, $type) = getimagesize($filename);

第三个元素$type则是这些IMAGETYPE_XXX个常量中的任何一个:

Value   Constant
1     IMAGETYPE_GIF
2     IMAGETYPE_JPEG
3     IMAGETYPE_PNG
4     IMAGETYPE_SWF
5     IMAGETYPE_PSD
6     IMAGETYPE_BMP
7     IMAGETYPE_TIFF_II (intel byte order)
8     IMAGETYPE_TIFF_MM (motorola byte order)
9     IMAGETYPE_JPC
10    IMAGETYPE_JP2
11    IMAGETYPE_JPX
12    IMAGETYPE_JB2
13    IMAGETYPE_SWC
14    IMAGETYPE_IFF
15    IMAGETYPE_WBMP
16    IMAGETYPE_XBM
17    IMAGETYPE_ICO

来自exif_imagetype。如果将两者结合使用,可以先检查是否可以为您加载类型,然后检查是否可以加载它。

答案 1 :(得分:1)

Splfileinfo::getextension.php可能正是您所需要的。

编辑:我误读了,你只想查看一个字符串的扩展名。在PHP中没有内置函数,你只需使用正则表达式:

$ext = substr(strrchr($fileName,'.'),1);

答案 2 :(得分:1)

你可以试试这个

$fileExtention = pathinfo ( $filename, PATHINFO_EXTENSION );

或者

$fileExtention = image_type_to_extension(exif_imagetype($filename));

最后我会建议你使用像http://phpthumb.sourceforge.net/这样的东西,而不是你需要操作图像的东西