exif_imagetype

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

exif_imagetype确定图像的类型

描述

exif_imagetype(string $filename): int|false

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

exif_imagetype() 可用于避免对不支持文件类型的其他 exif 函数的调用,或与 $_SERVER['HTTP_ACCEPT'] 结合使用,以检查查看者是否能够在浏览器中看到特定图像。

参数

filename
要检查的图像。

返回值

当找到正确的签名时,将返回相应的常量值,否则返回值为 false。返回值与 getimagesize() 在索引 2 中返回的值相同,但 exif_imagetype() 速度更快。

定义了以下常量,它们表示可能的 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
17 IMAGETYPE_ICO
18 IMAGETYPE_WEBP
19 IMAGETYPE_AVIF

注意:

如果 exif_imagetype() 无法从文件读取足够字节以确定图像类型,它将发出 E_NOTICE 并返回 false

变更日志

版本 描述
7.1.0 添加了 WebP 支持。
8.1.0 添加了 AVIF 支持。

示例

示例 #1 exif_imagetype() 示例

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

参见

添加备注

用户贡献的备注 7 则

23
Tim
16 年前
通过反复试验,似乎文件必须大于或等于 12 字节才能避免“读取错误!”。以下是一个解决方法,以避免抛出错误

// exif_imagetype 在文件太小的情况下会抛出“读取错误!”
if (filesize($uploadfile) > 11)
$mimetype = exif_imagetype($uploadfile);
else
$mimetype = false;
24
christophe dot tournayre at univ*bpclermont dot Fr
10 年前
因为我只想从内存字符串中检查 jpeg 或 png,所以这是我的 2 个函数,它们很快并且没有依赖项

<?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');
}
?>
15
admin at leonard !spam challis dot com
13 年前
Windows 用户:如果您遇到致命错误“Fatal error: Call to undefined function exif_imagetype()”,并且您已启用 php_exif.dll,请确保您也启用了 php_mbstring.dll。您必须将 mbstring 放置在 php.ini 中的 exif 之前,例如:

extension=php_mbstring.dll
extension=php_exif.dll

您可以通过调用 phpinfo() 并搜索 exif 来检查是否已成功。
11
tom dot ghyselinck at telenet dot be
16 年前
如果函数 exif_imagetype() 不可使用,
您可以尝试以下解决方法

if ( ! function_exists( 'exif_imagetype' ) ) {
function exif_imagetype ( $filename ) {
if ( ( list($width, $height, $type, $attr) = getimagesize( $filename ) ) !== false ) {
return $type;
}
return false;
}
}
-18
vuatintac at yahoo dot com
9 年前
为了检查文件是否为图像,我使用了这个

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;
}
-19
匿名
17 年前
如果文件大小非常小(2 字节),似乎会给出“读取错误”警告。我认为这是因为它需要至少 3 个字节来确定文件类型
-23
tom at tomvergote dot be
20 年前
libexif 也可用于从 id3 标签中解析图像信息

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