it-swarm-pt.tech

Converter imagem JPG / GIF para PNG em PHP?

Possível duplicata de
Converta imagem jpg em formato gif, png e bmp usando PHP

Eu tenho um formulário PHP que permite o upload de imagens e verifica exif_imagetype(); _ para garantir que uma imagem seja válida.

No entanto, quero que todos os formatos, PNG, JPG, JPEG e GIF, acabem sendo PNG depois de enviados.

Como posso fazer isso?

31
Aaron

Você só precisa imagepng() então. De fato, quase se torna uma linha:

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

Você usaria $_FILES["id"]["tmp_name"] para o nome do arquivo e um nome de arquivo de saída diferente, obviamente. Mas o próprio formato de imagem se tornaria redundante.

84
mario

Com base no tipo de imagem, você pode selecionar a função correta para abrir o arquivo:

$extension = strtolower(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;
}

Então você acabou de salvar o arquivo usando:

imagepng($image, $new_filename, $quality); 
11
Cyclonecode
<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';
    }       
}
?>
2
Zulkhaery Basrul

Muito simples usando o funções 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);

Por questões de concisão, obviamente isso não lida com o caso, se a imagem já for um PNG.

1
deceze