Tengo un montón de alta calidad de los archivos PNG. Quiero usar PHP para convertir a JPG debido a que los tamaños de archivo más pequeños, mientras que el mantenimiento de la calidad. Quiero mostrar los archivos JPG en la web.

Hace PHP dispone de funciones/bibliotecas para hacer esto? Es la calidad/compresión bueno?

  • Tenga en cuenta que dependiendo de lo que las imágenes son JPG no siempre tienen un tamaño de archivo más pequeño que el de un PNG, así que asegúrese de que está utilizando el más adecuado para su situación. lbrandy.com/blog/2008/10/my-first-and-last-webcomic
InformationsquelleAutor John | 2009-07-29

8 Comentarios

  1. 171

    Ello, para convertir de forma segura un PNG a JPG con la transparencia en blanco.

    $image = imagecreatefrompng($filePath);
    $bg = imagecreatetruecolor(imagesx($image), imagesy($image));
    imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
    imagealphablending($bg, TRUE);
    imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
    imagedestroy($image);
    $quality = 50; //0 = worst /smaller file, 100 = better /bigger file 
    imagejpeg($bg, $filePath . ".jpg", $quality);
    imagedestroy($bg);
    • Esta es la manera más correcta para convertir PNG a JPG de forma segura. Quiero agregar superior ++ calificación para esta respuesta.
    • Esto es mucho mejor, se ocupa de la transparencia. Dos principales respuestas son ahora el nivel de vinculación!
    • Esto sin duda se debe ser aceptada respuesta
    • Usted acaba de hacer mi día un infierno mucho mejor compañero! Gracias!
    • ¿Este código funciona para otro tipo de archivos de código fuente, como bmp?
  2. 58

    Tener cuidado de lo que usted desea convertir. JPG no admite alfa-transparencia mientras PNG. Perder la información.

    A convertir, usted puede utilizar la siguiente función:

    //Quality is a number between 0 (best compression) and 100 (best quality)
    function png2jpg($originalFile, $outputFile, $quality) {
        $image = imagecreatefrompng($originalFile);
        imagejpeg($image, $outputFile, $quality);
        imagedestroy($image);
    }

    Esta función utiliza la imagecreatefrompng() y la imagejpeg() funciones de la biblioteca GD.

    • Por favor, eche un vistazo a danLeon ‘s respuesta a convertir PNG a JPG de forma segura.
    • Esta respuesta no trabajar con archivos png con transparencia.
  3. 11

    Este es un pequeño ejemplo que va a convertir la imagen».png’ a ‘image.jpg’ en el 70% calidad de imagen:

    <?php
    $image = imagecreatefrompng('image.png');
    imagejpeg($image, 'image.jpg', 70);
    imagedestroy($image);
    ?>

    Espero que ayude

  4. 10
    <?php
    function createThumbnail($imageDirectory, $imageName, $thumbDirectory, $thumbWidth) {
        $explode = explode(".", $imageName);
        $filetype = $explode[1];
    
        if ($filetype == 'jpg') {
            $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName");
        } else
        if ($filetype == 'jpeg') {
            $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName");
        } else
        if ($filetype == 'png') {
            $srcImg = imagecreatefrompng("$imageDirectory/$imageName");
        } else
        if ($filetype == 'gif') {
            $srcImg = imagecreatefromgif("$imageDirectory/$imageName");
        }
    
        $origWidth = imagesx($srcImg);
        $origHeight = imagesy($srcImg);
    
        $ratio = $origWidth / $thumbWidth;
        $thumbHeight = $origHeight / $ratio;
    
        $thumbImg = imagecreatetruecolor($thumbWidth, $thumbHeight);
        imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $origWidth, $origHeight);
    
        if ($filetype == 'jpg') {
            imagejpeg($thumbImg, "$thumbDirectory/$imageName");
        } else
        if ($filetype == 'jpeg') {
            imagejpeg($thumbImg, "$thumbDirectory/$imageName");
        } else
        if ($filetype == 'png') {
            imagepng($thumbImg, "$thumbDirectory/$imageName");
        } else
        if ($filetype == 'gif') {
            imagegif($thumbImg, "$thumbDirectory/$imageName");
        }
    }
        ?>

    Esta es una muy buena miniatura script =)
    He aquí un ejemplo:

    $ruta = ruta de La carpeta donde la imagen original es.
    $nombre = El nombre del archivo que desea hacer una miniatura de.
    $thumbpath = La ruta de acceso al directorio donde desea que la imagen en miniatura para ser guardado en.
    $maxwidth = el ancho máximo de la imagen en PÍXELES, por ejemplo. 100 (que será 100px).

    createThumbnail($path, $name, $thumbpath, $maxwidth);

    • He utilizado este y funcionó bien, gracias!
  5. 4

    Es posible que desee buscar en Image Magick, generalmente considerado como el estándar de facto de la biblioteca para el procesamiento de imágenes. Requiere un extra de módulo de php para ser instalado, aunque, no se si alguno/que están disponibles en una instalación por defecto.

    HTH.

  6. 2

    Sé que no es una respuesta exacta a la OP, pero como las respuestas ya dadas…

    ¿Usted realmente necesita para hacer esto en PHP ?

    Lo que quiero decir es : si usted necesita para convertir un montón de imágenes, haciendo en PHP podría no ser la mejor manera : se le enfrenta a memory_limit, max_execution_time, …

    Yo también diría que la GD puede ser que no consiga la mejor calidad/tamaño ; pero no estoy seguro de eso (si se hace una comparación entre GD y otras soluciones, estoy muy interesado por los resultados 😉 )

    Otro enfoque, no usando PHP, sería el uso de Image Magick a través de la línea de comandos (y no como una extensión de PHP al igual que otras personas han sugerido),

    Habría que escribir un shell-script que pasa a través de todos .png archivos, y les da a

    • convertir para crear un nuevo .jpg archivo para cada .png archivo
    • o mogrify que trabajan directamente en el archivo original y reemplazarlo.


    Como una nota al margen : si usted está haciendo esto directamente en el servidor de producción, se podría poner algo de tiempo de sueño entre los racimos de conversiones, para que deje que se enfríe un poco, a veces ^^


    He utilice la secuencia de comandos de shell + convert/mogrify un par de veces (que ellos se ejecutan para algo como 10 horas de tiempo de uno), y hacen el trabajo muy bien 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here