2012-06-03 28 views
7

Ho un sito con circa 1500 immagini JPEG e voglio comprimerle tutte. Passare attraverso le directory non è un problema, ma non riesco a trovare una funzione che comprime un file JPEG già presente sul server (non voglio caricarne uno nuovo) e sostituisce il vecchio.Comprimere jpeg sul server con PHP

PHP ha una funzione integrata per questo? In caso contrario, come faccio a leggere il JPEG dalla cartella nello script?

Grazie.

+2

Cosa intendi esattamente per "comprimi"? Se intendi aprire e ri-salvare ogni file con una qualità inferiore, sii * molto * attento su quale strumento usare. La qualità della libreria GD di PHP non è esattamente eccezionale. Puoi aggiungere qualche altro contesto su ciò che stai cercando di fare? –

risposta

14

non stai dicendo se si sta utilizzando GD, quindi immagino che questo.

$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

è il parametro all'interno di imagecreatefromjpeg la fonte, nel senso che posso mettere un percorso anche a un file? – Meir

+0

sì, puoi dare un percorso sia per imagecreate da jpeg che imagejpeg e per lo scollegamento. –

+0

Grazie mille. – Meir

19

Io preferisco usare l'estensione IMagick per lavorare con le immagini. GD utilizza troppa memoria, specialmente per file di grandi dimensioni. Ecco un frammento di codice dal Charles Hall nel manuale di PHP:

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

Non ho mai sentito parlare di questo prima ...: S Grazie, guarderò anche io :) – Neograph734

+2

Non dimenticare di chiamare '$ img-> clean()', altrimenti perderai risorse. – Eran

+0

@Eran, risolto, grazie! –

0

La soluzione fornita da vlzvl funziona correttamente. Tuttavia, utilizzando questa soluzione, è anche possibile sovrascrivere un'immagine modificando l'ordine del codice.

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

Ciò consente di comprimere un'immagine preesistente e memorizzarla nella stessa posizione con lo stesso nome file.

+0

Non 'imagejpeg()' sovrascrive di default l'immagine originale quando si utilizza lo stesso nome file? – Matt