29 votos

¿Usar PHP para convertir PNG a JPG con compresión?

Tengo un montón de archivos PNG de alta calidad. Quiero usar PHP para convertirlos a JPG por su menor tamaño de archivo manteniendo la calidad. Quiero mostrar los archivos JPG en la web.

¿Tiene PHP funciones/bibliotecas para hacer esto? ¿La calidad/compresión es buena?

83voto

Daniel De León Puntos 2842

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

48voto

Andrew Moore Puntos 49765

Ten cuidado con lo que quieres convertir. JPG no soporta la transparencia alfa mientras que PNG sí. Perderás esa información.

Para convertir, 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 el imagecreatefrompng() y el imagejpeg() funciones de la biblioteca de GD.

9voto

Al. Puntos 2254

Este es un pequeño ejemplo que convertirá "imagen.png" en "imagen.jpg" con una calidad de imagen del 70%:

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

Espero que eso ayude

8voto

Patrik Puntos 59
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 =) Aquí hay un ejemplo:

$path = La ruta de la carpeta donde está la imagen original. $name = El nombre del archivo del que quieres hacer una miniatura. $thumbpath = La ruta al directorio donde quieres que se guarde la miniatura. $maxwidth = El ancho máximo de la miniatura en PX, por ejemplo 100 (que será 100px).

crear Thumbnail($ruta, $nombre, $ruta, $máxima anchura);

4voto

falstro Puntos 16545

Puede que quieras investigar Magia de la imagen que normalmente se considera la biblioteca estándar de facto para el procesamiento de imágenes. Sin embargo, requiere la instalación de un módulo PHP extra, no estoy seguro de si alguno/cuáles están disponibles en una instalación por defecto.

HTH.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X