Saltar al contenido

¿Convertir imagen JPG / GIF a PNG en PHP?

Solución:

Solo necesitas imagepng() luego. De hecho, casi se convierte en una sola línea:

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

Usarías $_FILES["id"]["tmp_name"] para el nombre del archivo, y obviamente un nombre de archivo de salida diferente. Pero el formato de imagen que se prueba en sí mismo se volvería redundante.

Según el tipo de imagen, puede seleccionar la función correcta para abrir el archivo:

$extension = strtolower(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;
}

Luego, simplemente guarde el archivo usando:

imagepng($image, $new_filename, $quality);

Vale la pena señalar que esto solo analizará la extensión real y no validará realmente, por lo que el archivo está en el formato específico. Por ejemplo, puede tomar una imagen jpg y simplemente cambiar la extensión a png. Entonces, un mejor enfoque es usar el exif_imagetype() que devolverá el tipo de imagen sin depender de la extensión real.

<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';
    }       
}
?>
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *