php - jpg - png que es
Use PHP para convertir PNG a JPG con compresiĆ³n? (8)
Es posible que desee ver Image Magick , generalmente considerada la biblioteca estándar de facto para el procesamiento de imágenes. Sin embargo, requiere un módulo adicional de php para ser instalado, no estoy seguro si alguno / cuáles están disponibles en una instalación predeterminada.
HTH.
Tengo un montón de archivos PNG de alta calidad. Quiero usar PHP para convertirlos a JPG debido a que tiene tamaños de archivo más pequeños y mantiene la calidad. Quiero mostrar los archivos JPG en la web.
¿PHP tiene funciones / bibliotecas para hacer esto? ¿La calidad / compresión es buena?
Este es un pequeño ejemplo que convertirá ''image.png'' en ''image.jpg'' con un 70% de calidad de imagen:
<?php
$image = imagecreatefrompng(''image.png'');
imagejpeg($image, ''image.jpg'', 70);
imagedestroy($image);
?>
Espero que ayude
Haga esto para convertir de manera 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);
PHP tiene algunas funciones de procesamiento de imágenes junto con la función imagecreatefrompng() y imagejpeg() . El primero creará una representación interna de un archivo de imagen PNG, mientras que el segundo se usará para guardar esa representación como archivo de imagen JPEG.
Tenga cuidado con lo que quiere convertir. JPG no admite transparencia alfa mientras que PNG lo hace. Perderás esa información.
Para convertir, puede usar 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 usa las funciones imagecreatefrompng()
y imagejpeg()
de la biblioteca de GD.
Vea esta lista de bibliotecas de imágenes php . Básicamente es GD o Imagemagick.
Sé que no es una respuesta exacta al OP, pero como ya se dieron las respuestas ...
¿Realmente necesitas hacer esto en PHP?
Lo que quiero decir es: si necesitas convertir muchas imágenes, hacerlo en PHP podría no ser la mejor manera: te enfrentarán a memory_limit
, max_execution_time
, ...
También diría que GD podría no obtener la mejor relación calidad / tamaño; pero no estoy seguro de eso (si haces una comparación entre GD y otras soluciones, estoy muy interesado por los resultados ;-))
Otro enfoque, no usar PHP, sería usar Image Magick a través de la línea de comando (y no como una extensión de PHP como sugirieron otras personas)
Tendría que escribir un script de shell que pase por todos los archivos .png
, y se los da a cualquiera
-
convert
para crear un nuevo archivo.jpg
para cada archivo.png
- o
mogrify
para trabajar directamente en el archivo original y anularlo.
Como nota al margen: si está haciendo esto directamente en su servidor de producción, podría poner un poco de tiempo de espera entre un montón de conversiones, para que se enfríe un poco a veces ^^
He usado el script shell + convert
/ mogrify
varias veces (haciendo que se ejecuten durante algo así como 10 horas una vez) , y hacen el trabajo realmente bien :-)
<?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 secuencia de comandos en miniatura =) Aquí hay un ejemplo:
$ path = La ruta a la carpeta donde está la imagen original. $ name = El nombre del archivo del que quiere hacer una miniatura. $ thumbpath = La ruta al directorio donde desea guardar la miniatura. $ maxwidth = el ancho máximo de la miniatura en PX, por ej. 100 (que será 100px).
createThumbnail($path, $name, $thumbpath, $maxwidth);