文字

exif_imagetype

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

exif_imagetype判断一个图像的类型

说明

int exif_imagetype ( string $filename )

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

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

参数

filename
被检查的图像文件名。

返回值

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

更新日志

版本 说明
4.3.2 支持 JPCJP2JPXJB2XBM 以及 WBMP
4.3.0 支持 SWC

预定义常量

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

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

范例

Example #1 exif_imagetype() 例子

<?php

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

?>

参见

  • getimagesize() - 取得图像大小

用户评论:

[#1] vuatintac at yahoo dot com [2015-04-01 17:32:41]

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

[#2] web-coder at ukr dot net [2014-12-01 13:44:43]

validate file exists and the image type 

if(file_exists($path_image) && in_array(exif_imagetype($path_image),array(1, 2, 3, 6))){ ... }

[#3] sourabh dot deshmukh at snstech dot com [2013-12-10 13:42:46]

This functions showing up a warning message that "warnings stream does not support seeking". Is it related to size of file which you mentioned in earlier post or something else. Also how do I get rid of that warning?

[#4] christophe dot tournayre at univ*bpclermont dot Fr [2013-09-18 09:01:01]

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');
  }
?>

[#5] admin at leonard !spam challis dot com [2010-11-03 08:02:44]

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.

[#6] tom dot ghyselinck at telenet dot be [2008-01-13 01:36:23]

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

[#7] Tim [2007-11-19 08:40:07]

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;

[#8] [2006-11-09 16:43:11]

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

[#9] tom at tomvergote dot be [2004-02-07 14:11:39]

libexif can also be used to parse image info out of id3 tags:

exif_read_data("mp3_with_2.4ID3TAGS, '', true, false);

上一篇: 下一篇: