Проверка типа файла изображения


Я пытаюсь добавить на свой сайт функцию, с помощью которой пользователи могут настроить изображение своего профиля как изображение с внешнего 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 2

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 имеет больше, чем нужно для манипулирования изображениями