0

我编写了这样的 GIF 数据的 python 脚本:

['8c', '2d', '99', '87', '2a', '1c', 'dc']

并把它变成这样:

[1, 1, 1, 1, 1, 2, 2, 2, 2, 2]

首先,我获取所有块中的所有数据并将其转换为比特流>>我不确定这一步。我不知道我是否必须将所有块作为一个流一次解压缩或单独解压缩它们

         for byte in data:
             bit=bin(int(m,16))[2:]
             while len(bit)<8:
                 bit='0'+bit
             c.append(bit[::-1] )
         stream=  ''.join(c)  
         decompress(stream)

这是解压功能

def decompress(s,InitialCodeSize):
    index=[]
    table=Initialize(InitialCodeSize)
    codesize = InitialCodeSize + 1
    ClearCode=int(math.pow(2, InitialCodeSize))
    L=int(math.pow(2, codesize))
    code = int(s[:codesize][::-1],2)
    s=s[codesize:]
    c = table[code]

    old = c
    for i in c:
       index.append(i)
    while s !='':
      code = int(s[:codesize][::-1],2)

      s=s[codesize:]

      if code == ClearCode:

           table=Initialize(InitialCodeSize)
           codesize = InitialCodeSize + 1

      if code in  list(xrange(len(table ))):
          c=table[code]
          table.append(old + [c[0]])

      else:

        table.append(old + [old[0]])

        c=  old + [old[0]]

      for i in c:
         index.append(i)
      old=c
      if len(table) == L and codesize< 12:
          codesize=codesize+1

          L=int(math.pow(2, codesize))

    return index

当图像有几个块时一切正常,但是当它有更多块时,它总是返回较少数量的像素
,例如,如果图像 522*200 =104400 像素它只给我 61806 像素我虽然可能 GIF 格式使用 RLE 编码

编辑

也许我不清楚我的问题我想知道
解压缩GIF文件中的一个数据块和解压缩多个数据块有什么不同吗?我将这些多个块视为一个数据流吗?并且还按照本文http://www.professordaybell.com/handouts/GIF-JPEG_Compression.pdf中的建议使用某种 RLE 格式的 gif 格式?

4

0 回答 0