Newsgroup: it.comp.www.php
Titolo: Ridimensionamento immagine e fatal error memory

Buongiono,
sono alle prese con uno script per la gestione di una photogallery che
fa l'upload di max 3 immagini alla volta. Ciascuna viene poi
ridimensionata a 800x600 e creata la sua relativa thunbline. Non ho
una grande conoscenza di elaborazione immagini con php ma da quel che
ho letto per ciascun immagine ho utilizzato in ordine le funzioni
imagecreatetruecolor, imagecreatefromjpeg, imagecopyresampled, e
imagejpeg. Se per la creazione delle miniature non ci sono problemi
nei passaggi per arrivare all'immagine 800x600, al momento della
funzione imagecreatefromjpeg lo script si blocca con questo errore:
Fatal error: Allowed memory size of 12582912 bytes exhausted (tried to
allocate 1333 bytes) in /web/htdocs/
www........................................................  on line
72
In questo caso ho caricato una sola immagine di dimensioni di 15kb!
Non capisco quale sia il problema.
Sapete aiutarmi?
Grazie 1000
Fabio

In questo caso ho caricato una sola immagine di dimensioni di 15kb!
Ma hai liberato la memoria usata dalle immagini precedenti? :-)
Leonardo
-- 
 What do you make, so fair and bright;
 What do you build with sails for flight;
 What do you weave with wool so white?

 In questo caso ho caricato una sola immagine di dimensioni di 15kb!
[..]
le dimensioni del file possono contare poco..
ti consiglio di delegare il ridimensionamento dell'immagine ad un programma
esterno.. PHP non e' adatto a lavorare con risoluzioni elevate..
-- 
www.iuz-lab.info
 - 
www.php-faq.org

  What do you weave with wool so white?
mmmm.... non ho capito cosa vuoi dire...scusa ma non sono un
professionista....puoi spiegarmi meglio?
rispondendo a iuz: lo so che faccio prima e otengo risultati migliori
ma costruisco tutto ciò perchè la gallery sarà aggiornata
principalmente da "utonti".

 capisco quale sia il problema.
Non guardare alla dimensione in byte, soprattutto delle jpeg.
Se stai caricando qualcosa a 1024x768 in truecolor, occupa 3 Mb di RAM, 
piu` gli 800x600 (a 32bit) che sono altri 2 Mb, totale 5 Mb. Per tre 
immagini fanno 15 Mb, piu` le richieste di script, variabili, oggetti, 
ecc., potrebbero chiedere anche 5-10 Mb.
Quindi o, come dice Leonardo, liberi la memoria delle precedenti immagini, 
o aumenti la memoria disponibile all'interprete da php.ini
Bye.


Ok..grazie per avermi chiarito la questione. Intuivo un problema di
memoria allocata ma pensavo fosse legato alla dimensione in byte
dell'immagine.
Setto questo, sareste così gentili da spiegarmi la soluzione di
liberare la memoria delle immagini precedenti? Dimenticavo di dirvi
che l'errore compare anche se carico una sola immagine e lacio gli
altri campi upload vuoti!
Grazie ancora
Fabio

 principalmente da "utonti".
intendevo esterno a PHP ma comunque interno al server.. gli utenti non
dovranno fare niente di diverso da quello che farebbero se tu utilizzassi
le gd di PHP invece di un programma esterno.. non li ho mai usati ma ho
spesso sentito nominare imagemagick..
-- 
www.iuz-lab.info
 - 
www.php-faq.org

professionista....puoi spiegarmi meglio?
Provo con dello pseudocodice; nota le righe con i tre asterischi.
	// Carico l'immagine
	$img = ImageCreateFromJPEG($original_image);
	// Faccio i miei bravi conti
	...
	// Creo l'immagine per la thumb
	$gd  = ImageCreateTrueColor($thumb_w, $thumb_h);
	// Ricampiono
	ImageCopyResampled($img, $gd, 0, 0, ...
	// Ora l'immagine originale non mi serve piu'
***	ImageDestroy($img);
	// Salvo la thumbnail
	ImageJPEG($gd, $quality, $thumbpath);
	// Libero la memoria usata da $gd, che non mi serve piu'
***	ImageDestroy($gd);




Grazie a tuti per i preziosi consigli. Alla fine ho trovato uno script
che utilizza un misto tra gd e Imagemagick molto facile da utilizzare.
Si chiama phpThumb.
Ciao, Fabio