GD: indice colori... alpha si o no?

ciao a tutti, questo è il mio primo messaggio qui

conoscevo il sito da parecchio tempo ma non avrei mai pensato che la comunità fosse così numerosa

spero di essere aiutato un po' e di avere la possibilità di aiutare :D io qualcosina la so, se posso darò una mano

il mio problema è questo: come faccio a sapere se un'immagine caricata con le gd ha un canale alpha, senza violentare il server con gigacicli che scorrono la palette colore per colore?

se io carico una png con canale alpha

nell'elaborare l'immagine devo sapere PRIMA del resampling se ci sono colori con alpha

se io eseguo questo codice

imagealphablending($this->newImage, false);

imagecopyresampled(......);

imagesavealpha($this->newImage, true);

e salvo come jpeg, viene (chiaramente) fuori una schifezza in quanto riga 1 e 3 andrebbero usate solo se il formato di destinazione è png (formato che supporta l'alpha)

mi affido a voi  :D

grazie in anticipo

inviato 9 anni fa
Wesley
X 0 X

ok... trovato il metodo veloce (spero)

devo leggere i chunk delle immagini PNG... se vi informate su questo formato saprete che ogni immagine contiene delle stringhe di dati tipo

come posso fare per leggerlo via php?

ciauz

risposto 9 anni fa
Wesley
X 0 X

Prova così: http://it2.php.net/manual/it/function.getimagesize.php#65713

Pare che getimagesize() non si ferma ai primi 4 parametri, però non ho ancora capito bene cosa s'intende per "channel", ho paura che non sia alfa, fammi capire.

PS le immagini PNG sono una favola, purtroppo però Internet Explorer non ha la piena compatibilità all'indietro, ovvero IE6 le visualizza ma senza il canale alfa appunto, e IE5 ... meglio non dire. Non so IE7 ma spero vivamente di sì.

Il resto, ovvio, le supporta abbastanza bene; anche le MNG, ovvero le PNG animate.

Per il tuo problema mi vengono in mente altre cose: vedere se nell'archivio PEAR c'è qualcosa, e appunto ritrovare i chunk nell'header del file, ed estrapolare i dati che ti servono, non è detto che sia male, però mi sa pure che è lunghetta :(

risposto 9 anni fa
Marco Grazia
X 0 X

eh lasciamo perdere bits/channels di getimagesize che funziona a random

png a 32 bit secondo l'array sono in realtà png a 8 bit  ::)

risposto 9 anni fa
Wesley
X 0 X

Forse perché vede solo quelli  ::)

Ti rimane solo il chunking del file aperto in binario ... auguri.

risposto 9 anni fa
Marco Grazia
X 0 X

dammi un indizio almeno! :D come faccio a rendere readable quel valore?

risposto 9 anni fa
Wesley
X 0 X

http://wiki.tcl.tk/759

si potrà tradurre in php?

risposto 9 anni fa
Wesley
X 0 X

per leggere un file binario in PHP ti conviene usare le classiche funzione fopen() con l'opzione 'rb', fread e fseek().

Prova a scrivere un po' di codice e se hai problemi riportalo così lo proviamo.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
dammi un indizio almeno! :D come faccio a rendere readable quel valore?

Visto che parlavi di chunk pensavo lo sapessi come funzionavano.

Come dice Gianni, devi aprire il file in binario e poi sapendo dove andare a cercare (il primo bit del record dove sta il dato da cercare) sposti il puntatore al file a quel punto e leggi una stringa di x caratteri, dove x è il numero di caratteri da leggere.

Benvenuto nella vecchia informatica di base.

E' solo un esempio:

$handle = fopen("immagine.png", "rb"); // apre un file in modalità binaria
fseek($handle, 5, SEEK_SET); // sposta il puntatore alla posizione 6 (Attenzione! Si inizia a contare da 0 (zero))
$contents = fread($handle, 3);  // legge 3 byte dalla posizione di handle 
fclose($handle);
/*
Ora contents contiene 3 byte  in formato presumibilmente esadecimale e devi convertirli in
qualcosa di leggibile
*/

// Forse alla fine ti converrà usare var_dump per capire cosa c'è dentro contents
for ($index = 0;$index <= count($contents);$index++) $stringa .= chr($contents[$index]);
echo $stringa;

Attento, è solo un esempio, i numeri per la posizione della lettura del chunk li ho messi a caso, non ho idea dove essi siano, starà a te svilupparlo al meglio.

Tieni presente che è la base per il crack di un file  ;D

risposto 9 anni fa
Marco Grazia
X 0 X

mai dovuto craccare un file :D sti acari

$handle = fopen($argSourceImagePath, "rb");

$contents = fread($handle, filesize($argSourceImagePath));

fclose($handle);

for($x=0;$x<strlen($contents);$x++)

echo chr($contents{$x});

tutti <?> in firefox... cosa sbaglio?

risposto 9 anni fa
Wesley
X 0 X

prova a fare un semplice echo di $contents

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

purtroppo quello che riesco a leggere è pochissimo

provate voi

<?php

                $argSourceImagePath="immagine.png"; 

      $handle = fopen($argSourceImagePath, "rb");

      $string = fread($handle, filesize($argSourceImagePath));

      fclose($handle);

      for ($i=0;$i<strlen($string);$i++)

      {

         $chr = $string{$i};

         $ord = ord($chr);

         if ($ord<32 or $ord>126)

         {

           $chr = ".";

           $string{$i} = $chr;

         }

      }

      echo($string);

?>

risposto 9 anni fa
Wesley
X 0 X

$handle = fopen($argSourceImagePath, "rb");

$string = fread($handle, 19);

fclose($handle);

echo(hexdec($string{18}));

trovato... non riesco a renderlo leggibile però

risposto 9 anni fa
Wesley
X 0 X

prova a passarlo al chr(hexdec($string{18})));

ioppure la passi a printf

risposto 9 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda