Как проверить и увидеть расширение изображений с помощью PHP? - PullRequest
0 голосов
/ 13 ноября 2009

Как я могу проверить, является ли изображение в формате PNG, GIF, TIFF и JPG, и если это так, создайте миниатюру и сохраните ее в файле большого пальца.

Пока что я могу проверить и сохранить для JPEGimages.

Вот код ниже.

<?php

//Name you want to save your file as
$save = 'members/3/images/thumbs/thumb-pic.jpg';

$file = 'members/3/images/pic.jpg';
echo "Creating file: $save"; 


list($width, $height) = getimagesize($file) ;

if ($width >= 180){
    $modwidth = 180;
    $modheight = ((180.0/$width) * $height);
} else {
    $modwidth = $width;
    $modheight = $height;
}

$tn = imagecreatetruecolor($modwidth, $modheight) ;
$image = imagecreatefromjpeg($file) ;
imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height) ;

// Here we are saving the .jpg, you can make this gif or png if you want
//the file name is set above, and the quality is set to 100%
imagejpeg($tn, $save, 100) ; 
?> 

Ответы [ 5 ]

2 голосов
/ 13 ноября 2009

Вот один из способов сделать это, используя ассоциативный массив для присвоения каждому формату соответствующей функции imagecreatefrom...:

$handlers = array(
    'jpg'  => 'imagecreatefromjpeg',
    'jpeg' => 'imagecreatefromjpeg',
    'png'  => 'imagecreatefrompng',
    'gif'  => 'imagecreatefromgif'
);

$extension = strtolower(substr($file, strrpos($file, '.')+1));
if ($handler = $handlers[$extension]){
    $image = $handler($file);
    //do the rest of your thumbnail stuff here
}else{
    //throw an 'invalid image' error
}
1 голос
/ 16 ноября 2009

У вас это в основном не работает.

Используйте exif_image type или используйте pathinfo ($ image_path, PATHINFO_EXTENSION) , чтобы получить тип файла. Затем сохраните его в переменной (например, $ type).

Затем используйте оператор switch для запуска соответствующей функции imagefrom * (см. Страницу imagefromjpeg «см. Также»), используя переменную, установленную вами для типа файла, в качестве сравнения переключателя.

В конце используйте тот же базовый оператор switch для запуска image * (imagepng и т. Д. [Проверьте также на странице imagejpeg для них]), чтобы сохранить большой палец обратно к исходному типу ( это важно для PNG и GIF-файлов, которые могут иметь прозрачность, что в этом случае необходимо включить сохранение прозрачности).

Кстати, для прозрачности, проверьте imagesavealpha и imagealphablending.

1 голос
/ 13 ноября 2009

Я бы пошел с модулем imagemagick, в частности, Imagick :: identifImage () . Он возвращает массив, как показано ниже - проверьте, что находится в формате ключ.

Array
(
    [imageName] => /some/path/image.jpg
    [format] => JPEG (Joint Photographic Experts Group JFIF format)
    [geometry] => Array
        (
            [width] => 90
            [height] => 90
        )

    [type] => TrueColor
    [colorSpace] => RGB
    [resolution] => Array
        (
            [x] => 300
            [y] => 300
        )

    [units] => PixelsPerInch
    [fileSize] => 1.88672kb
    [compression] => JPEG
    [signature] => 9a6dc8f604f97d0d691c0286176ddf992e188f0bebba98494b2146ee2d7118da
)
0 голосов
/ 14 ноября 2009

Я бы сделал это, как ответил Брианреавис, но я бы не использовал расширение файла изображения для определения типа изображения, а скорее использовал бы функцию exif_imagetype .

$filetypeinfo = exif_imagetype($file);
switch($filetypeinfo){
    case 1:
    $extension = 'gif';
    break;
    case 2:
    $extension = 'jpg';
    break;
    case 3:
    $extension = 'png';
    break;
}
0 голосов
/ 13 ноября 2009

Вы можете использовать функции пантомимы. Попробуйте echo mime_content_type('php.gif'):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...