2012-06-03 26 views
7

Tengo un sitio con aproximadamente 1500 imágenes JPEG, y quiero comprimirlas todas. Pasar por los directorios no es un problema, pero parece que no puedo encontrar una función que comprima un archivo JPEG que ya está en el servidor (no quiero cargar uno nuevo) y reemplaza el anterior.Comprimir jpeg en el servidor con PHP

¿Tiene PHP una función incorporada para esto? Si no, ¿cómo leo el archivo JPEG de la carpeta en el script?

Gracias.

+2

¿Qué quiere decir exactamente con "compress"? Si quiere decir abrir y volver a guardar cada archivo con una calidad inferior, tenga * muy * cuidado con la herramienta que debe usar. La calidad de la biblioteca GD integrada de PHP a la relación de tamaño de archivo no es exactamente excelente. ¿Puedes agregar un poco más de contexto sobre lo que estás tratando de hacer? –

Respuesta

14

no está diciendo si está usando GD, así que supongo que esto.

$img = imagecreatefromjpeg("myimage.jpg"); // load the image-to-be-saved 

// 50 is quality; change from 0 (worst quality,smaller file) - 100 (best quality) 
imagejpeg($img,"myimage_new.jpg",50); 

unlink("myimage.jpg"); // remove the old image 
+0

es el parámetro dentro de imagecreatefromjpeg de la fuente, lo que significa que también puedo poner una ruta a un archivo? – Meir

+0

sí, puede dar una ruta tanto para crear imágenes desde JPEG y imagejpeg como para desvincularlas. –

+0

Muchas gracias. – Meir

19

Yo prefiero usar la extensión IMagick para trabajar con imágenes. GD usa demasiada memoria, especialmente para archivos más grandes. He aquí un fragmento de código Charles Hall en el manual de PHP:

$img = new Imagick(); 
$img->readImage($src); 
$img->setImageCompression(Imagick::COMPRESSION_JPEG); 
$img->setImageCompressionQuality(90); 
$img->stripImage(); 
$img->writeImage($dest); 
$img->clean(); 
+0

Nunca había oído hablar de este ...: S Gracias, también lo voy a ver :) – Neograph734

+2

No olvides llamar a '$ img-> clean()', de lo contrario perderás recursos. – Eran

+0

@Eran, reparado, ¡gracias! –

0

La solución provista por vlzvl funciona bien. Sin embargo, al utilizar esta solución, también puede sobrescribir una imagen cambiando el orden del código.

$image = imagecreatefromjpeg("image.jpg"); 
    unlink("image.jpg"); 
    imagejpeg($image,"image.jpg",50); 

Esto le permite comprimir una imagen preexistente y almacenarla en la misma ubicación con el mismo nombre de archivo.

+0

¿'imagejpeg()' no sobrescribe de manera predeterminada la imagen original cuando se usa el mismo nombre de archivo? – Matt

Cuestiones relacionadas