Esiste un modo per convertire un PNG a colori a 16 bit (scala di grigi) in un formato di colore RGBA4444 utilizzando PHP?Colore grezzo 16 bit
OPPURE
C'è un modo per caricare questo PNG in scala di grigi a 16 bit utilizzando il formato RGBA4444?
L'intestazione PNG indica che sta utilizzando il colore a 16 bit (profondità bit) e il colore in scala di grigi (tipo di colore) (http://www.fileformat.info/format/png/corion.htm, intestazione immagine IHDR).
$rgb = imagecolorat($src, $x, $y);
var_dump("RGB - ".dechex($rgb));
$rgba = imagecolorsforindex($src, $rgb);
var_dump("RGBA - ".dechex($rgba));
Il valore di $rgb
(per esempio) è A7
mentre $rgba
è [A7, A7, A7, 0]
.
BTW, qui è l'intestazione di detto documento:
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 | .PNG........IHDR
00 00 03 FF 00 00 03 FF 10 00 00 00 00 E3 F9 FF | ................
C9 00 00 00 0D 74 45 58 74 44 46 4D 54 00 52 34 | .....tEXtDFMT.R4
47 34 42 34 41 34 E0 94 BA 92 00 00 20 00 49 44 | G4B4A4........ID
41 54 .. .. | AT
EDIT:
Quello che ho fatto prima è stato seguire questo codice da Charlie (https://stackoverflow.com/a/7293429/2205703). (Naturalmente con alcune modifiche.) Quindi convertire ogni formato di colore a 16 bit (basato su tEXt
pezzo) in formato RGBA8888.
Quindi, pack()
in formato file PNG. Ma ho ancora errore di immagine.
Si potrebbe semplicemente troncare di colore a 8 bit. Per ottenere risultati migliori, è necessario implementare il dithering o utilizzare una libreria che faccia questo per te. – Brad