在PHP中生成大型透明GIF而不使用imagecreate

时间:2018-05-03 11:17:00

标签: php performance gif lzw

出于内存/性能原因,我需要生成自定义大小的透明GIF而不使用imagecreate()或imagecreatetruecolor()。 我需要图像尽可能小,所以我想不使用GCT,只有GCE指定透明度,例如对于200x200px图像,如下所示:

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位代码?如果是这样,它如何映射到字节?

任何人都可以解释或提供一个代码片段,它会生成任意宽度x高度透明GIF的LZW数据吗?

1 个答案:

答案 0 :(得分:1)

最后,我将该块保留为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