Convertir une image JPG/GIF en PNG en PHP?

possible Duplicate of

Convertissez l'image jpg au format gif, png & bmp en utilisant PHP

j'ai un formulaire PHP qui permet le téléchargement d'image 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 faire cette?

28
demandé sur Community 2011-12-18 09:28:00

4 réponses

vous avez juste besoin de imagepng() alors. En fait, il devient presque un one-liner:

 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 sondant lui-même deviendrait redondant.

84
répondu mario 2011-12-18 05:34:44

en fonction de quel type d'image il s'agit, Vous pouvez sélectionner la bonne fonction pour ouvrir le fichier:

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

ensuite vous enregistrez simplement le fichier en utilisant:

imagepng($image, $new_filename);
9
répondu Cyclonecode 2016-10-11 12:35:32
<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
répondu Zulkhaery Basrul 2011-12-18 05:52:46

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);

pour la concision ceci ne gère évidemment pas le cas si l'image est déjà PNG.

1
répondu deceze 2011-12-18 05:34:39