2011-12-18 3 views
27

Eventuali duplicati di
Convert jpg image to gif, png & bmp format using PHPConverti l'immagine JPG/GIF in PNG in PHP?

Ho una forma PHP che consente il caricamento di immagini e controlli exif_imagetype(); per assicurarsi che un'immagine è valida.

Tuttavia, desidero che tutti i formati, PNG, JPG, JPEG e GIF, finiscano per essere PNG una volta inviati.

Come posso fare questo?

+0

http://stackoverflow.com/questions/755781/convert-jpg-image-to-gif-png-bmp-format-using-php –

risposta

79

Hai solo bisogno di imagepng() allora. In effetti diventa quasi una battuta:

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

Si potrebbe utilizzare $_FILES["id"]["tmp_name"] per il nome del file, e un diverso nome del file di output, ovviamente. Ma il sondaggio del formato immagine stesso diventerebbe ridondante.

+0

Così semplice. +1 per quello. –

+1

Questo ha funzionato perfettamente. Ho appena cambiato output.png in "uploads/out.png" per spostare le directory. – Aaron

+0

Ma mi chiedo se questo ha distrutto il file temporaneo? O devo eseguire un 'imagedestroy()' per rimuovere il file temporaneo? – Aaron

1

molto semplice usando l'gd functions:

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

Per concisione questo ovviamente non gestisce il caso se l'immagine è già un PNG.

8

In base a che tipo di immagine è è possibile selezionare la funzione corretta per aprire il file:

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

Poi basta salva il file utilizzando:

imagepng($image, $new_filename); 
+0

Che ne dici di convertire le immagini in file .ico? – Mostafa

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