2011-12-18 28 views

Odpowiedz

79

Po prostu potrzebujesz imagepng(). W rzeczywistości jest to prawie staje się jeden-liner:

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

byłoby użyć $_FILES["id"]["tmp_name"] dla nazwy pliku, a inna nazwa pliku wyjściowego oczywiście. Ale samo formatowanie obrazu stanie się zbędne.

+0

Takie proste. +1 za to. –

+1

To działało idealnie. Właśnie zmieniłem output.png na "uploads/out.png", aby przenieść katalogi. – Aaron

+0

Ale zastanawiam się, czy to zniszczyło plik tymczasowy? Lub czy muszę uruchomić 'imagedestroy()', aby usunąć plik tymczasowy? – Aaron

1

Bardzo proste pomocą 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); 

Dla zwięzłości to oczywiście nie radzi sobie sprawę, jeżeli obraz jest już PNG.

8

oparciu o jaki rodzaj obrazu to można wybrać właściwą funkcję, aby otworzyć plik:

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

Następnie wystarczy zapisać plik przy użyciu:

imagepng($image, $new_filename); 
+0

Co powiecie na przekonwertowanie obrazów na pliki .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'; 
    }  
} 
?>