2012-09-17 19 views
5

Ho bisogno di creare un'immagine in scala di grigi in PHP. Non sto parlando di un'immagine indicizzata con valori in scala di grigi nella sua tavolozza, ma di un'immagine VERO in scala di grigio. La differenza è nel byte 26 del PNG (tipo di colore):Creare un vero PNG in scala di grigi in PHP

0 - greyscale <-- THIS IS WHAT I NEED 
2 - RGB 
3 - RGB with palette 
4 - greyscale + alpha 
6 - RGB + alpha 

(Vedi How to check a PNG for grayscale/alpha color type? per i dettagli)

ho cercato imagefilter($im, IMG_FILTER_GRAYSCALE); così come imagetruecolortopalette($im, false, 255); ma tutto quello che ottiene sono o RGB in scala di grigi (a colori tipo 2) o immagini della tavolozza RGB con una tavolozza in scala di grigi (tipo di colore 3). Ho anche provato a inizializzare l'immagine con imagecreate() anziché imagecreatetruecolor() ma di nuovo questo porta solo a un'immagine della tavolozza.

C'è un modo per creare un tipo di colore PNG in scala di grigi con le funzioni GD di PHP (o qualsiasi altra funzione in PHP)?

Ecco alcuni esempi di diverse immagini in scala di grigi per mostrare cosa intendo. Sembrano tutti uguali, ma se li apri in PhotoShop e guardi l'immagine -> Modalità, vedi la differenza. Anche un editor esadecimale rivelerà la differenza nel byte 26:

RGB RGB, colore di tipo 2, 3149 byte
RGB palette tavolozza RGB, tipo 3, 3971 byte
True Grayscale Image immagine in scala di grigi vero colore, colore tipo 0, 1105 byte < - questo è quello che mi serve


UPDATE 01:

Ecco il codice di base che utilizzo per creare i PNG. Le righe commentate sono alternative che ho provato:

//$im = imagecreate($image_size, $image_size); 
$im = imagecreatetruecolor($image_size, $image_size); 

//imagefilter($im, IMG_FILTER_GRAYSCALE); 
//imagetruecolortopalette($im, false, 255); 

imagepng($im, $imgPathName); 
imagedestroy($im); 
+0

come appare il tuo codice? – Breezer

+0

@Breezer: vedere "AGGIORNAMENTO 01" nel mio OP. – Jpsy

+0

Immagino che tu stia cercando http://php.net/manual/en/function.imagecolorallocate.php Penso che questo tutorial ti aiuterà lungo la strada, http://php.about.com/od /gdlibrary/ss/grayscale_gd.htm – Breezer

risposta

5

La libreria GD non supporta la conversione in una "scala di grigi" "reale". Supporta solo RGB e TrueColor *.

C'è un modo per creare un tipo di colore PNG in scala di grigi con le funzioni GD di PHP (o qualsiasi altra funzione in PHP)?

ImageMagick è quello che stai cercando.

$im = new Imagick(); 
$im->readImage('file.png'); 
$im->setImageType(Imagick::IMGTYPE_GRAYSCALE); 
$im->writeImage('file.gray.png'); 
+0

Hai un riferimento? – Xeoncross

+0

@Xeoncross dalla sorgente https://bitbucket.org/pierrejoye/gd-libgd/src - supporta solo l'output RGB e TrueColor *. – h0tw1r3

+0

@ h0tw1r3: Esatto, grazie! Come nota a margine: ho giurato di non usare mai più ImageMagick finché ho accesso a GraphicsMagick sul computer di destinazione. Fortunatamente il codice di h0tw1r3 funzionerà perfettamente con GM, se sostituisci "Imagick'' con' 'Gmagick'' (e installa l'estensione di GraphicsMagick PHP). – Jpsy