exif_imagetype() - exif函数(可交换图像信息)
exif_imagetype()
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
判断一个图像的类型
说明
exif_imagetype(string $filename): intexif_imagetype()读取一个图像的第一个字节并检查其签名。
本函数可用来避免调用其它exif函数用到了不支持的文件类型上或和$_SERVER['HTTP_ACCEPT']结合使用来检查浏览器是否可以显示某个指定的图像。
参数
$filename被检查的图像文件名。返回值
如果发现了恰当的签名则返回一个对应的常量,否则返回FALSE
。返回值和getimagesize()返回的数组中的索引 2 的值是一样的,但本函数快得多。
更新日志
版本 | 说明 |
---|---|
4.3.2 | 支持JPC,JP2,JPX,JB2,XBM以及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 |
范例
exif_imagetype()例子
参见
getimagesize()
取得图像大小
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 :
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);
内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)