2011-12-18 54 views
27

Duplicar Posible de
Convert jpg image to gif, png & bmp format using PHP¿Convertir imagen JPG/GIF a PNG en PHP?

que tiene una forma de PHP que permite la subida de imágenes y cheques exif_imagetype(); para asegurarse de que una imagen es válida.

Sin embargo, quiero todos los formatos, PNG, JPG, JPEG, GIF, y para llegar a ser PNG, una vez presentada.

¿Cómo puedo ir haciendo esto?

+0

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

Respuesta

79

Sólo se necesita imagepng() a continuación. De hecho, casi se convierte en una sola línea:

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

Se podría utilizar $_FILES["id"]["tmp_name"] para el nombre de archivo y un nombre de archivo de salida diferente, obviamente. Pero el examen del formato de la imagen se volvería redundante.

+0

tan simple. +1 por eso. –

+1

Esto funcionó perfectamente. Acabo de cambiar output.png por "uploads/out.png" para mover directorios. – Aaron

+0

Pero me pregunto si esto destruyó el archivo temporal. ¿O necesito ejecutar un 'imagedestroy()' para eliminar el archivo temporal? – Aaron

1

muy sencilla utilizando el 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); 

Para la concisión esto obviamente no maneja el caso si la imagen ya es un PNG.

8

Sobre la base de qué tipo de imagen es lo que puede seleccionar la función correcta para abrir el archivo:

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

A continuación, sólo guarda el archivo usando:

imagepng($image, $new_filename); 
+0

¿Qué hay de convertir las imágenes en archivos 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'; 
    }  
} 
?>