Генерация большого прозрачного GIF в PHP без использования imagecreate - PullRequest
0 голосов
/ 03 мая 2018

Мне нужно сгенерировать прозрачный GIF нестандартного размера без использования imagecreate () или imagecreatetruecolor () по соображениям памяти / производительности. Мне нужно, чтобы изображение было как можно меньше, поэтому я хотел бы использовать не GCT, а только GCE, задающий прозрачность, например, для изображения размером 200x200 пикселей, например:

47 49 46 38 39 61 - GIF89a
C8 00 - 200px
C8 00 - 200px
00 - No GCT
00 00 
21 F9 - Graphic Control Extension
04 01 0A 00 01 - colour #1 is transparent (I've seen this work on a 1x1 transparent GIF also without GCT)
00  - section separator
2C - image block
00 00 00 00 - block start position x=0, y=0
C8 00 C8 00 - block width and height, actually the image size
00 - section separator
? - image data follows
00 - section separator
3B - image end

До сих пор я мог генерировать вышеупомянутую структуру GIF, но часть, в которой я застрял, - это то, где мне нужно создать данные в кодировке LZW. Для прозрачного пиксельного изображения 1x1, которое работает, я видел следующие байты:

02 - LZW minimum code size
02 - LZW data length
4C 01 - actual LZW data

Во-первых, у меня есть сомнения в понимании того, как это декодируется. Означает ли это, что таблица отображения LZW имеет 3-битные коды? Если да, то как он отображается в байтах?

Может кто-нибудь объяснить или предоставить фрагмент кода, который будет генерировать данные LZW для произвольной ширины x высоты прозрачного GIF?

1 Ответ

0 голосов
/ 03 мая 2018

Наконец, я сохранил блок как прозрачный блок 1x1, который действителен и работает во всех браузерах. При таком подходе вам также необходимо сохранить размеры блока до 1 x 1, например:

2C - image block
00 00 00 00 - block start position x=0, y=0
01 00 01 00 - block width and height, actually the image size
...