Подтвердить что ты не робот

Каков наилучший и быстрый способ проверки правильности изображения на PHP?

Каков наилучший и быстрый способ проверки правильности изображения на PHP? Мне нужно, чтобы он мог проверять GIF, JPG, а также изображения PNG.

4b9b3361

Ответ 1

exif_imagetype - лучшее решение.

Этот метод быстрее, чем использование getimagesize. Процитировать php.net "Возвращаемое значение - это то же самое значение, которое getimagesize() возвращает в индексе 2, но exif_imagetype() выполняется намного быстрее."

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

Ответ 2

Я думаю 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

Как рекомендовано документации PHP:

"Не используйте 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 :(';
}

Ответ 4

exif_imagetype намного быстрее, чем getimagesize и не использует gd-Lib (оставляя более компактную память)

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

   return TRUE;
}

Ответ 5

Я использую эту функцию... он также проверяет URL-адреса

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
  }
 }

Ответ 6

Я использую это:

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