PDA

View Full Version : [php]Estrarre immagini


scrat84
25-02-2007, 11:05
Ciao ragazzi ho un problema da risolvere.

Io devo scrivere su delle immagini del testo utilizzando le librerie gd.
Se l'immagine è presente in una cartella sul server con questo codice:

list($width, $height, $type, $attr) = getimagesize($_SERVER['DOCUMENT_ROOT'].'/foto/a.jpg');

riesco a estrarre l'immagine e poi scriverci ma se io le immagini le ho in un database come faccio a estrarle?

Probabilmente devo cambiare l'indirizzo $_SERVER['DOCUMENT_ROOT'].'/foto/a.jpg' ma proprio non so come...

Graxie a tutti!:)

andbin
26-02-2007, 09:12
Io devo scrivere su delle immagini del testo utilizzando le librerie gd.
Se l'immagine è presente in una cartella sul server con questo codice:

list($width, $height, $type, $attr) = getimagesize($_SERVER['DOCUMENT_ROOT'].'/foto/a.jpg');

riesco a estrarre l'immagine e poi scriverci ma se io le immagini le ho in un database come faccio a estrarle?

Probabilmente devo cambiare l'indirizzo $_SERVER['DOCUMENT_ROOT'].'/foto/a.jpg' ma proprio non so come...Innanzitutto suppongo che nel database tu abbia l'intero contenuto binario della immagine, giusto? (ad esempio in un campo BLOB).
In questo caso hai 2 possibilità:

- Leggere l'immagine dal database e scaricarla temporaneamente da qualche parte su disco. getimagesize() si aspetta il nome di un file, quindi l'immagine deve essere sul file-system.

- Se l'immagine ce l'hai sul database, si suppone che poco prima di inserirla nel db ce l'avevi sul file-system (ad esempio da un upload, per fare un esempio). In quel caso ti basterebbe mettere nella tabella anche le informazioni fornite da getimagesize(). ;)

Io direi che ti conviene usare il secondo modo. Tra l'altro puoi usare la funzione imagecreatefromstring() che consente di creare una risorsa gd usando i dati binari della immagine dentro una stringa. Quindi non hai bisogno di scaricare sul file-system l'immagine.

scrat84
26-02-2007, 20:34
Ciao infatti ho pensato anche io al secondo modo e funziona.
Ho risolto il problema che ti ho detto sopra però ora l'immagine creata (con la scritta) la vorrei salvare ancora nel database.

Ho usato questa funzione

imagejpeg($thumb,'$destinazione', 100);

ma nella variabile destinazione cosa metto per salvare l'immagine, considerando che imagejpeg restituisce un booleano?
Grazie!

andbin
27-02-2007, 08:39
ora l'immagine creata (con la scritta) la vorrei salvare ancora nel database.

Ho usato questa funzione

imagejpeg($thumb,'$destinazione', 100);

ma nella variabile destinazione cosa metto per salvare l'immagine, considerando che imagejpeg restituisce un booleano?Allora facciamo una premessa: il secondo parametro di imagejpeg deve essere una stringa che contiene un nome di file. Tra l'altro non dovresti metterla tra apici singoli perché così come l'hai messa non avviene l'espansione della variabile.

Insomma ... usando quel parametro puoi solo scrivere l'immagine su un file e basta. Certo ... si potrebbe scriverla su disco, aprire il file, leggerla e metterla in una stringa e alla fine inserirla nel db. Ma sarebbe poco efficiente, secondo me.

Ma c'è un'altra soluzione: usare le "Output Control Functions".
ob_start ();

imagejpeg ($img, NULL, 100);

$image_data = ob_get_contents ();

ob_end_clean ();In $image_data hai i dati binari della immagine. Non viene scritto alcun file. imagejpeg invia l'immagine sullo standard-output, che però viene "catturato".

scrat84
27-02-2007, 20:59
Ok provo un po s tudiare quello che mi hai scritto poi ti faccio sapere se incontro problemi!
Grazie per l'aiuto!
ciao ciao