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?
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.
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);
<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';
}
}
?>
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.