2010-10-26 8 views
7

Sto ridimensionando le immagini con php gd. Il risultato sono risorse immagine che voglio caricare su Amazon S3. Funziona benissimo se immagazzino le immagini su disco prima, ma vorrei caricarle direttamente dalla memoria. Questo è possibile se conosco solo il byte dell'immagine.Come ottenere la dimensione della risorsa immagine in byte con PHP e GD?

C'è un modo per ottenere la dimensione (in byte) di una risorsa immagine gd?

+0

Non è possibile caricare le risorse. –

risposta

12

È possibile utilizzare PHP memory i/o stream per salvare l'immagine e successivamente ottenere la dimensione in byte.

Quello che fate è:

$img = imagecreatetruecolor(100,100); 
// do your processing here 
// now save file to memory 
imagejpeg($img, 'php://memory/temp.jpeg'); 
$size = filesize('php://memory/temp.jpeg'); 

Ora si dovrebbe conoscere la dimensione

Non so di qualsiasi metodo (gd) per ottenere la dimensione di una risorsa immagine.

+1

Il problema è che le funzioni 'gd' si aspettano un percorso, non una risorsa file, su cui scrivere. Questo dovrebbe funzionare con [buffer di output] (http://php.net/manual/en/function.ob-start.php). – deceze

+0

@deceze: dovresti essere in grado di fornire un percorso come: 'php: // memory/resource = img.jpeg' –

+0

Eccellente, buona spiegazione. – deceze

-1

Salvare il file immagine nel formato desiderato in una directory tmp, quindi utilizzare filesize() http://php.net/manual/de/function.filesize.php prima di caricarlo su S3 dal disco.

+0

Ecco la versione inglese: http://www.php.net/manual/en/function.filesize.php :) – infinity

+0

Salvare un file temporaneo su disco è esattamente quello che sto cercando di evitare qui. – Martin

+0

Perché? Non è tanto un problema di prestazioni e risparmia molta RAM. – joni

0

Si potrebbe guardare la seguente risposta per aiuto. Funziona per modifiche di memoria generiche in php. Anche se potrebbe essere coinvolto un sovraccarico, potrebbe essere più di una stima.

Getting size of PHP objects

9

non riesco a scrivere su php: // memoria con imagepng, per cui uso ob_start(), ob_get_content() End ob_end_clean()

$image = imagecreatefrompng('./image.png'); //load image 
// do your processing here 
//... 
//... 
//... 
ob_start(); //Turn on output buffering 
imagejpeg($image); //Generate your image 

$output = ob_get_contents(); // get the image as a string in a variable 

ob_end_clean(); //Turn off output buffering and clean it 
echo strlen($output); //size in bytes 
+1

Perché non usare 'ob_get_length' come suggerito @JonathanWren? – Wilt

5

Questo funziona anche:

$img = imagecreatetruecolor(100,100); 

// ... processing 

ob_start();    // start the buffer 
imagejpeg($img);   // output image to buffer 
$size = ob_get_length(); // get size of buffer (in bytes) 
ob_end_clean();   // trash the buffer 

E ora $size avrà la dimensione in byte.

+0

Grazie. Questo mi ha aiutato perché avevo bisogno di un modo per determinare la dimensione del file senza caricarlo. – Benjamin

Problemi correlati