Конвертировать JPG / GIF изображение в PNG на PHP? - PullRequest
30 голосов
/ 18 декабря 2011

Возможный дубликат
Преобразование изображения jpg в формат gif, png и bmp с использованием PHP

У меня есть форма PHP, которая позволяет загружать изображения и проверяет exif_imagetype();, чтобы убедиться, что изображение действительно.

Однако я хочу, чтобы все форматы, PNG, JPG, JPEG и GIF, в конечном итоге были PNG после отправки.

Как я могу это сделать?

Ответы [ 4 ]

85 голосов
/ 18 декабря 2011

Вам просто нужно imagepng() тогда.На самом деле он почти становится однострочным:

 imagepng(imagecreatefromstring(file_get_contents($filename)), "output.png");

Вы можете использовать $_FILES["id"]["tmp_name"] для имени файла, и, очевидно, другое имя выходного файла.Но само исследование формата изображения станет избыточным.

10 голосов
/ 18 декабря 2011

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

$extension = pathinfo($filename, PATHINFO_EXTENSION); 
switch ($extension) {
    case 'jpg':
    case 'jpeg':
       $image = imagecreatefromjpeg($filename);
    break;
    case 'gif':
       $image = imagecreatefromgif($filename);
    break;
    case 'png':
       $image = imagecreatefrompng($filename);
    break;
}

Затем вы просто сохраняете файл, используя:

imagepng($image, $new_filename);
2 голосов
/ 18 декабря 2011
<form method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" name="submit" value="Submit" />
</form>

<?php
if(isset($_POST['submit']))
{
    if(exif_imagetype($_FILES['image']['tmp_name']) ==  IMAGETYPE_GIF) 
    {
        $newpng = 'image.png';
        $png = imagepng(imagecreatefromgif($_FILES['image']['tmp_name']), $newpng);
    }
    elseif(exif_imagetype($_FILES['image']['tmp_name']) ==  IMAGETYPE_JPEG) 
    {
        $newpng = 'image.png';
        $png = imagepng(imagecreatefromjpeg($_FILES['image']['tmp_name']), $newpng);
    }
    else //already png
    {
        $newpng = 'image.png';
    }       
}
?>
1 голос
/ 18 декабря 2011

Очень просто, используя функции gd :

switch (exif_imagetype($image)) {
    case IMAGETYPE_GIF :
        $img = imagecreatefromgif($image);
        break;
    case IMAGETYPE_JPEG :
        $img = imagecreatefromjpeg($image);
        break;
    default :
        throw new InvalidArgumentException('Invalid image type');
}

imagepng($img, $filename);

Для краткости это, очевидно, не подходит для случая, если изображение уже является PNG.

...