检查图像在PHP中是否有效的最佳和最快方法是什么?

时间:2011-09-12 20:12:51

标签: php image

检查图像在PHP中是否有效的最佳和最快方法是什么? 我需要它能够检查GIF,JPG以及PNG图像。

6 个答案:

答案 0 :(得分:29)

exif_imagetype是一个更好的解决方案。

此方法比使用getimagesize更快。引用php.net“返回值与getimagesize()在索引2中返回的值相同,但exif_imagetype()要快得多。”

if(exif_imagetype('path/to/image.jpg')) {
    // your image is valid
}

<强>更新

在阅读getimagesize可能不可靠之后,我试图找到更多关于哪些文件类型可以给出误报的信息,但是找不到更多信息,所以进行了简短的测试(使用exif_imagetype):

PowerPoint-survey-results.pptx - N
LRMonoPhase4.wav               - N
TestWordDoc.doc                - N
drop.avi                       - N
test.dll                       - N
raw_data_sample.sav            - N
text.txt                       - N
Excel-survey-results.xlsx      - N
pdf-test.pdf                   - N
simplepie-1.5.zip              - N
Word-survey-results.docx       - N
centaur_1.mpg                  - N
Test.svg                       - N
multipage_tif_example.tif      - Y
200.gif                        - Y
Test.png                       - Y
test.jpg                       - Y

我意识到这并非详尽无遗,但至少表明,对于常见的文件类型,结果是预期的。

答案 1 :(得分:6)

根据PHP documentation

的建议

“不要使用getimagesize()来检查给定文件是否是有效图像。请使用专用的解决方案,例如Fileinfo扩展名。”

以下是一个例子:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo, "test.jpg");

if (isset($type) && in_array($type, array("image/png", "image/jpeg", "image/gif"))) {
    echo 'This is an image file';
} else {
    echo 'Not an image :(';
}

答案 2 :(得分:4)

我想getimagesize

list($width, $height, $type, $attr) = getimagesize("path/to/image.jpg");

if (isset($type) && in_array($type, array(
    IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF))) {
  ...
}

答案 3 :(得分:2)

exif_imagetype比getimagesize快得多,并且不使用gd-Lib(留下更精简的mem足迹)

function isImage($pathToFile)
{
  if( false === exif_imagetype($pathToFile) )
   return FALSE;

   return TRUE;
}

答案 4 :(得分:-1)

我用这个:

function is_image($path)
{
    $a = getimagesize($path);
    $image_type = $a[2];

    if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP)))
    {
        return true;
    }
    return false;
}

答案 5 :(得分:-2)

我使用此功能......它也会检查网址

function isImage($url){
   $params = array('http' => array(
                'method' => 'HEAD'
             ));
   $ctx = stream_context_create($params);
   $fp = @fopen($url, 'rb', false, $ctx);
   if (!$fp) 
      return false;  // Problem with url

  $meta = stream_get_meta_data($fp);
  if ($meta === false){
      fclose($fp);
      return false;  // Problem reading data from url
  }
 }