Проверка типа файла изображения
Я пытаюсь добавить на свой сайт функцию, с помощью которой пользователи могут настроить изображение своего профиля как изображение с внешнего url-адреса, а не сохранять его на своем компьютере, а затем загружать на мой сервер.
Вот что я придумал до сих пор:
$filename = $inputs['image_url'];
if(getimagesize($filename)){
// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = 100;
$new_height = 100;
// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
//a check needs to be done here $image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
$filename = "profile_pictures/". md5( uniqid(rand(),true) ).".jpg";
imagejpeg($image_p,$filename,100);
}else{
echo 'This is not an image';
}
Код можно скачать .jpg-изображения в порядке,но я хочу поддерживать и другие типы файлов.
Мне нужно как-то проверить тип файла изображения, чтобы я мог сохранить другие изображения с различными типами файлов...
if($extension=="jpg" || $extension=="jpeg"){
$image = imagecreatefromjpeg($filename);
}else if($extension=="png"){
image = imagecreatefrompng($filename);
}else{
$image = imagecreatefromgif($filename);
}
Кто-нибудь знает функции, которая позволила бы мне сделать это?
Заранее благодарю за любые ответы.
3 ответа:
Самое прямое и для проверки совместимости GD вы можете просто создать его из строки:
$image = imagecreatefromstring(file_get_contents($filename));
Если это не удается загрузить, вы знаете, что вы не можете обработать этот образ.
Но Смотрите также
getimagesize
, он также проверяет тип файла, а не только ширину и высоту:Третий элемент,list($width, $height, $type) = getimagesize($filename);
$type
, тогда является любой из этихIMAGETYPE_XXX
констант:Value Constant 1 IMAGETYPE_GIF 2 IMAGETYPE_JPEG 3 IMAGETYPE_PNG 4 IMAGETYPE_SWF 5 IMAGETYPE_PSD 6 IMAGETYPE_BMP 7 IMAGETYPE_TIFF_II (intel byte order) 8 IMAGETYPE_TIFF_MM (motorola byte order) 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
От
exif_imagetype
. Если вы объедините оба, вы можете сначала проверить, подходит ли тип для загрузки для вас и затем вы проверяете, можете ли вы загрузить его.
Splfileinfo::getextension.php
может быть, это как раз то, что вам нужно.Edit: я неправильно понял, вы только хотите проверить расширение строки. В PHP нет встроенной функции для этого, вы можете просто использовать регулярное выражение:
$ext = substr(strrchr($fileName,'.'),1);
Вы можете попробовать из этого
$fileExtention = pathinfo ( $filename, PATHINFO_EXTENSION );
Или
$fileExtention = image_type_to_extension(exif_imagetype($filename));
Наконец, я бы посоветовал вам использовать что-то вроде http://phpthumb.sourceforge.net / is имеет больше, чем нужно для манипулирования изображениями