Newsgroup: it.comp.www.php
Titolo: Stranezza con le immagini

Come da oggetto, mi sta accadendo qualcosa di strano con le immagini.
Da PHP creo un'immagine che ha le dimensioni da me indicate, che è un
gradiente verticale.
Ho verificato che il calcolo dei colori sia corretto (facendo degli
echo), ho verificato che l'immagine venga composta esattamente (riga
per riga!!!) con linee che abbiano i colori da me calcolati, e alla
fine spedisco tutto al browser con un bell'header("Content-type: ....")
ecc. ecc.
Il problema è che al browser arriva un'immagine che è un po' diversa
da quella calcolata.
Ho usato imagejpeg() con qualità al 100%, e per controprova anche
imagepng(), ma niente... al browser arriva un gradiente in cui la parte
inferiore (colore più chiaro) è più chiaro del colore che dovrebbe
avere...
Le immagini, oltre che spedirle al browser, ho provato anche a salvarle
su disco, ed effettivamente aprendole con photoshop noto che i colori
sono ESATTAMENTE quelli calcolati e che dovrebbero essere... mentre se
le apro con firefox o explorer e poi copincollo su photoshop, riottengo
quell'immagine non corretta.
Spero di non essere *tremendamente* OT, ma ho bisogno di sapere come
mai c'è questo strano comportamento...
Thx in anticipo a tutti!!!

 Thx in anticipo a tutti!!!
facci sapere
-- 
SEZIONE RECUPERO LAVORO: Lancio di una nuova lavatrice sul mercato, due 
morti e sei feriti.
[CapoBecchino] - hotmail/msn: capobecchino [@] hotmail [.] com

Effettivamente potrebbe essere, ma con fietoscioc ho creato un'immagine
con stesse dimensioni, stesso gradiente, salvata in formato png (NON
per web, quindi nessuna ottimizzazione particolare) e aperta con il
browser, copincollata da capo in fietoscioc, risultato: immagine
identica!!! Perfetta come l'ho creata...
Non ci sto capendo più niente :(

 
posta come crei l'img e vediamo ..
-- 
SEZIONE DIVENTIMENTO & AFFINI: "Qual č il poliziotto piů sfortunato? 
Quello che muore al posto di  blocco. E quello piů fortunato? Blocco!"


function gradiente($colonne, $righe, $col_partenza, $col_arrivo,
$direzione)
{
  $RStart = ($col_partenza & 0xFF0000) / 65536;
  $GStart = ($col_partenza & 0x00FF00) / 256;
  $BStart = ($col_partenza & 0x0000FF);
  $REnd = ($col_arrivo & 0xFF0000) / 65536;
  $GEnd = ($col_arrivo & 0x00FF00) / 256;
  $BEnd = ($col_arrivo & 0x0000FF);
  $DeltaR = ($REnd - $RStart);
  $DeltaG = ($GEnd - $GStart);
  $DeltaB = ($BEnd - $BStart);
  // Creo un'immagine vuota delle dimensioni richieste
  if (($img = imagecreatetruecolor($colonne, $righe)) !== false)
  {
    $i = 0;
    while ($i <= $grandezza)
    {
      $R = round($RStart + $DeltaR * $i / $grandezza);
      $G = round($GStart + $DeltaG * $i / $grandezza);
      $B = round($BStart + $DeltaB * $i / $grandezza);
      $colore = imagecolorallocate($img, $R, $G, $B);
      imageline($img, 0, $i, $colonne, $i, $colore);
      imagecolordeallocate($img, $colore);
      $i++;
    }
  }
  return $img;
}
Questo è il codice.
La funzione restituisce un'immagine, quindi la richiamo da un'altra
pagina che riceve i parametri tramite GET, li controlla e se sono
corretti richiama questa funzione:
<?php
   include("miofile.php");
   $img = gradiente(...);
   header("Content-type: image/png");
   imagepng($img);
   imagedestroy($img);
?>
Se salvo l'immagine anche sull'hard disk, la vedo correttamente con PS
ma nel browser COMUNQUE viene vista "male".
Se la stessa immagine la creo con PS e la apro col browser, tutto ok...
vedo la stessa immagine che ho creato col programma di grafica...

Ah, aggiungo una cosa che ho dimenticato di copincollare nella funzione
gradiente(): prima di iniziare il ciclo, valorizzo $grandezza =
$righe-1;

 
bah| non saprei .. secondo me è sempre la male interpretazione dei 
colori da parte del browser .. quando crea la sfumatura .. secondo me 
mette alcuni colori che dai browser vengono male interpretati .. mentre 
fietoscioc effettua la giusta correzione ..
-- 
SEZIONE PICCOLI ACCORGIMENTI: "Chiamami un tassì", mi disse prima di 
morire e sulla sua lapide ho scritto: "Qui riposa in pace Untassì".


Ecco... ho provato anche a creare un gradiente usando SOLO colori per
web: da #000000 a #CCCCCC, l'immagine jpg salvata sull'hard disk
contiene i colori corretti, se la apro con firefox (o iexplorer) viene
visualizzata sempre con colori diversi da quelli che mi aspetto, se la
apro con PS e controllo i colori, sono corretti... AIUTOOOOOOOOOO!!!!

Il giorno ven, 05/05/2006 alle 02.12 -0700, Darkbyte [Google] ha
scritto:

Il codice mi pare corretto. I due dubbi che ho sono:
- nel manuale di PHP, a imagecolorallocate(), il primo commento dice che
un'immagine supporta solo 256 colori allocati, ma visto che li deallochi
non credo sia questo il problema.
- forse photoshop effettua dei calcoli diversi dai tuoi per
l'arrotondamento dei valori, bilanciati apposta per rendere piu` fluidi
i gradienti (per esempio, l'occhio e` piu` sensibile al verde che al
rosso e al blu, mi pare, per cui nelle vecchie schede grafiche a 16 bit
erano allocati 5 bit per rosso e blu e 6 per il verde).
Bye.
-- 
Alessandro Pellizzari

Si, _sicuramente_ photoshop effettua arrotondamenti diversi durante la
sfumatura, e questo l'ho anche controllato.
Il problema è un altro: supponiamo che io voglia creare un gradiente
verticale che vada da #000000 a #CCCCCC, con righe=100.
Dovrei ottenere un'immagine in cui la prima riga è composta da pixel
neri, e l'ultima riga invece deve essere composta da pixel di colore
#CCCCCC.
I calcoli in PHP vengono corretti, alla fine ottengo che _tutte_ le
righe sono corrette matematicamente parlando, i valori son quelli che
mi aspetto, e l'immagine salvata ha _quei_ colori.
Però quando da browser apro l'immagine (o se la ricevo con un
header()), le ultime righe hanno colori più chiari di #CCCCCC, tipo
#D7D7D7 :(
E' questo che non capisco: valori calcolati correttamente, valori che
rientrano comunque nel range dei colori WEB, colori _SALVATI_
correttamente, ma visualizzati proprio male! Non si parla di #CFCFCF o
#D0D0D0  o #CBCBCB, no... #D7D7D7.
Cioè proprio sbarellati!!!
E' qui che non capisco... :( :( :( :(