Newsgroup: it.comp.www.php
Titolo: GD e ridimensionamento, ci riprovo

Non ho avuto nessuna risposta a questo mio messaggio... siccome credo che
possa interessare molte persone, ci riprovo:
______________________________________
Salve a tutti,
tempo fa ho dovuto mettere mano ad un sito che tra le altre cose
ridimensionava le immagini per farne delle thumbnail. Uno schifo.
Ho quindi cercato in giro e sul manuale del php ho trovato una funzione
(postata da un utente) che si chiama ImageResizeBicubic() o giù di li. L'ho
usata ed in effetti le ridimensiona meglio, ma non va ancora bene.
A questo punto si accende il cervello e pensa a come fare una funzione per
il ridimensionamento delle immagini. Fatta, è lentissima, ma il risultato è
meraviglioso, sembrano fatte con photoshop!
Ci sono però alcuni problemi:
1) LA VELOCITA': una funzione che per ridimensionare un'immagine di 800x600
pixel supera i trenta secondi (dipende anche dalla dimensione risultante)
non va molto bene. Quanto potrebbe essere più veloce se la scrivessi in C e
la compilassi?
2) I COLORI. Non avendo le GD versione 2 non posso fare immagini con
imagecreatetruecolor(), quindi devo allocare dei colori in una tabella
(fittizia, sto usando delle jpg!) leggendoli dalla tabella dei colori (???)
dell'immagine originale. Ho provato ad allocare i colori mentre li scrivevo,
ma non ha funzionato a dovere. In pratica adesso faccio una cosa del genere:
// $src e $dst sono le immagini
for ($i = 0; $i < 256; $i++) {
  $colors = ImageColorsForIndex ($src, $i);
  ImageColorAllocate ($dst,
$colors['red'],$colors['green'],$colors['blue']);
} // questo pezzo l'ho copiato
e quando vado a scrivere i pixel nuovi:
$color = ImageColorClosest ($dst, $thispixel["red"],
$thispixel["green"],$thispixel["blue"]);
ImageSetPixel ($dst, $x, $y, $color);
Ora, in questo modo mi vincolo con 256 colori (e allocarne di più non si
può)... il risultato sarà perfetto solo in alcuni casi (solo quando"quando
mi dice culo", ndr). Come posso fare? Meglio forse fregarmene delle GD
vecchie?
Un'altra cosa - ho anche fatto una jpg di due colori e il primo ciclo mi dà
anche degli errori (dice che sto leggendo fuori dall'indice! in una jpg?
mah, mi vado a studiare le jpeg...)
Grazie per qualsiasi contributo o delucidazione (una volta risolti questi
problemi la metterò a disposizione di tutti!)
LAMASE

 vecchie?
Secondo me sì. Tra l'altro con le GD "nuove", se crei l'immagine con 
"imagecreatetruecolor", e ridimensioni con "imagecopyresampled" ottieni 
risultati molto buoni, e senza doverti scrivere una funzione da solo...:)
-- 
Lorenzo

 risultati molto buoni, e senza doverti scrivere una funzione da solo...:)
Hai mica qualche esempio di ridimensionamento fatto con le gd2 da farmi
vedere? Poi voglio vedere come fanno a ridimensionarle loro...
LAMASE

 vedere? Poi voglio vedere come fanno a ridimensionarle loro...
Io ad esempio per creare delle miniature di immagini JPG (uploadate dagli 
utenti) di altezza 100 px, e larghezza in proporzione, uso un codice del 
genere:
<?
$fullsize=imagecreatefromjpeg("immagine.jpg");
$fullsize_height=imagesy($fullsize);
$fullsize_width=imagesx($fullsize);
$thumb_height=100;
$thumb_width=floor($fullsize_width/($fullsize_height/$thumb_height));
$thumb=imagecreatetruecolor($thumb_width,$thumb_height);
imagecopyresampled($thumb,$fullsize,0,0,0,0,$thumb_width,$thumb_height,$fullsize_width,$fullsize_height);
imagedestroy($fullsize);
imagejpeg ($thumb,"miniatura.jpg");
imagedestroy($thumb);
?>
-- 
Lorenzo

 [...]
No, dicevo qualche esempio di immagine ridimensionata.... =) magari se puoi
mettere online l'originale e il risultato...
tnx
LAMASE