exif_imagetype
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
exif_imagetype — Определение типа изображения
Описание
$filename
)exif_imagetype() считывает начальные байты изображения и проверяет их сигнатуру.
exif_imagetype() может использоваться, чтобы избежать вызовов других exif-функций с неподдерживаемыми аргументами. Также при взаимодействии с $_SERVER['HTTP_ACCEPT'] можно проверять, будет ли изображение отображаться в броузере.
Список параметров
-
filename
- Изображение, тип которого требуется определить.
Возвращаемые значения
Если корректная сигнатура обнаружена, функция вернет соответствующую типу
изображения константу. В противном случае функция вернет FALSE
. Возвращаемое
значение то же, что и во втором аргументе при возврате из функции
getimagesize(), однако exif_imagetype()
значительно быстрее.
Замечание:
В случаях, когда невозможно считать количество байтов из файла достаточное для определения типа изображения, функция exif_imagetype() вызовет предупреждение уровня
E_NOTICE
и вернетFALSE
.
Список изменений
Версия | Описание |
---|---|
5.3.0 | Добавлена поддержка иконок. |
Предопределенные константы
Следующие определенные константы представляют возможные возвращаемые значения функции 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 |
Примеры
Пример #1 Пример использования exif_imagetype()
<?php
if (exif_imagetype('image.gif') != IMAGETYPE_GIF) {
echo 'Картинка не gif';
}
?>
Смотрите также
- image_type_to_mime_type() - Получение Mime-типа для типа изображения, возвращаемого функциями getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
- getimagesize() - Получение размера изображения
Коментарии
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;
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;
}
}
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.
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');
}
?>