web-dev-qa-db-fra.com

Convertir une image JPG / GIF en PNG en PHP?

Duplicata possible de
Convertir l'image jpg au format gif, png et bmp en PHP

J'ai un formulaire PHP qui permet le téléchargement d'images et vérifie exif_imagetype(); pour s'assurer qu'une image est valide.

Cependant, je veux que tous les formats, PNG, JPG, JPEG et GIF, finissent par être PNG une fois soumis.

Comment puis-je faire cela?

31
Aaron

Vous avez juste besoin de imagepng() alors. En fait, il devient presque un monoplace:

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

Vous utiliseriez $_FILES["id"]["tmp_name"] pour le nom de fichier, et un nom de fichier de sortie différent évidemment. Mais le format d'image lui-même deviendrait redondant.

84
mario

En fonction du type d'image, vous pouvez sélectionner la fonction appropriée pour ouvrir le fichier:

$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;
}

Ensuite, vous enregistrez simplement le fichier en utilisant:

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

Très simple en utilisant les fonctions 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);

Par souci de concision, cela ne gère évidemment pas le cas si l'image est déjà au format PNG.

1
deceze