Czy istnieje sposób na konwersję 16-bitowego (odcienie szarości) kolorowego PNG na format koloru RGBA4444 przy użyciu PHP?PHP raw 16bit kolor
LUB
Czy istnieje sposób, aby załadować 16-bitowej skali szarości w formacie PNG RGBA4444?
Nagłówek PNG mówi, że używa 16-bitowego koloru (Głębokość) i skali szarości (Typ koloru) (http://www.fileformat.info/format/png/corion.htm, Nagłówek obrazu IHDR).
$rgb = imagecolorat($src, $x, $y);
var_dump("RGB - ".dechex($rgb));
$rgba = imagecolorsforindex($src, $rgb);
var_dump("RGBA - ".dechex($rgba));
Wartość $rgb
(na przykład), gdy jest A7
$rgba
jest [A7, A7, A7, 0]
.
BTW, oto nagłówek wspomnianego pliku:
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:
co zrobiłem pierwszy było śledzić ten kod Charlie (https://stackoverflow.com/a/7293429/2205703). (Oczywiście przy pewnych modyfikacjach). Następnie przekonwertuj każdy 16-bitowy format kolorów (oparty na porcji tEXt
) na format RGBA8888.
Następnie, pack()
je do formatu pliku PNG. Ale wciąż mam błąd obrazu.
Można po prostu Przybliżenie do 8-bitowego koloru. Aby uzyskać lepsze wyniki, trzeba zaimplementować dithering lub skorzystać z biblioteki, która robi to za Ciebie. – Brad