• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • exif_imagetype()

    (PHP 4 >= 4.3.0, PHP 5, PHP 7)

    判断一个图像的类型

    说明

    exif_imagetype(string $filename): int

    exif_imagetype()读取一个图像的第一个字节并检查其签名。

    本函数可用来避免调用其它exif函数用到了不支持的文件类型上或和$_SERVER['HTTP_ACCEPT']结合使用来检查浏览器是否可以显示某个指定的图像。

    参数

    $filename
    被检查的图像文件名。

    返回值

    如果发现了恰当的签名则返回一个对应的常量,否则返回FALSE。返回值和getimagesize()返回的数组中的索引 2 的值是一样的,但本函数快得多。

    更新日志

    版本说明
    4.3.2支持JPC,JP2,JPX,JB2,XBM以及WBMP
    4.3.0支持SWC

    预定义常量

    定义有以下常量,并代表了exif_imagetype()可能的返回值:

    图像类型常量
    常量
    1IMAGETYPE_GIF
    2IMAGETYPE_JPEG
    3IMAGETYPE_PNG
    4IMAGETYPE_SWF
    5IMAGETYPE_PSD
    6IMAGETYPE_BMP
    7IMAGETYPE_TIFF_II(Intel 字节顺序)
    8IMAGETYPE_TIFF_MM(Motorola 字节顺序)
    9IMAGETYPE_JPC
    10IMAGETYPE_JP2
    11IMAGETYPE_JPX
    12IMAGETYPE_JB2
    13IMAGETYPE_SWC
    14IMAGETYPE_IFF
    15IMAGETYPE_WBMP
    16IMAGETYPE_XBM

    范例

    exif_imagetype()例子

    <?php
    if (exif_imagetype("image.gif") != IMAGETYPE_GIF) {
        echo "The picture is not a gif";
    }
    ?>
    

    参见

    Because I only want to check for jpeg or png from a memory string, this is my 2 functions that are quick and don't have any dependencies :
    <?php
     function is_jpeg(&$pict)
     {
      return (bin2hex($pict[0]) == 'ff' && bin2hex($pict[1]) == 'd8');
     }
     function is_png(&$pict)
     {
      return (bin2hex($pict[0]) == '89' && $pict[1] == 'P' && $pict[2] == 'N' && $pict[3] == 'G');
     }
    ?>
    
    By trial and error, it seems that a file has to be 12 bytes or larger in order to avoid a "Read error!". Here's a work-around to avoid an error being thrown:
    // exif_imagetype throws "Read error!" if file is too small
    if (filesize($uploadfile) > 11)
      $mimetype = exif_imagetype($uploadfile);
    else
      $mimetype = false;
    Windows users: If you get the fatal error "Fatal error: Call to undefined function exif_imagetype()", and you have enabled php_exif.dll, make sure you enable php_mbstring.dll. You must put mbstring before exif in the php.ini, i.e.:
    extension=php_mbstring.dll
    extension=php_exif.dll
    You can check whether this has worked by calling phpinfo() and searching for exif.
    If the function exif_imagetype() is not available,
    you can try the following workaround:
    if ( ! function_exists( 'exif_imagetype' ) ) {
      function exif_imagetype ( $filename ) {
        if ( ( list($width, $height, $type, $attr) = getimagesize( $filename ) ) !== false ) {
          return $type;
        }
      return false;
      }
    }
    to checking file is image, I used this:
    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;
    }
    Seems to give a 'Read error' warning if the size of the file is very small (2 bytes). I think this is because it needs a min 3 bytes to determine the file type
    libexif can also be used to parse image info out of id3 tags:
    exif_read_data("mp3_with_2.4ID3TAGS, '', true, false);

    下篇:exif_read_data()