2012-04-12 70 views
2

我试图添加一个功能到我的网站,用户可以将其个人资料图片设置为来自外部网址的图像,而不是将其保存到他们的电脑,然后将其上传到我的服务器。检查图像文件类型

这是我想出迄今:

  $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); 
       } 

有谁知道一个功能,让我做到这一点的?

在此先感谢您的答复。

回答

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。如果将两者结合起来,您可以首先检查类型是否可以为您加载,然后检查是否可以加载它。

+0

谢谢您还有什么!我已经设法从你的伟大答案中解决我的问题!其他人很好,但这正是我需要的:) – 2012-04-12 20:27:34

1

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

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

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

你可以试试这个

$fileExtention = pathinfo ($filename, PATHINFO_EXTENSION); 

或者

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

的最后我会建议你使用类似http://phpthumb.sourceforge.net/是比你需要处理图像