|
33楼
发表于 2020-1-14 11:51:53
|
只看该作者
北京市北京市
问道采用了2种压缩方案,一种传统的zlib压缩,一种叫做 lzss压缩算法,lzss的参数是12 4 2 2 0,貌似填12 4 2 2 1也是能解开的。
提取图片的方案
.版本 2
.子程序 ASK_解压图片, 字节集, , 问道
.参数 参_传入数据, 字节集
.参数 参_压缩数据, 压缩信息
.局部变量 字节集, 字节集
.局部变量 临时集, 字节集
.局部变量 缓冲区, 字节集
.局部变量 结果区, 字节集
.局部变量 返回值, 字节集
.局部变量 存文本, 文本型
.局部变量 a, 整数型, , , 是否为带坐标的图片
.局部变量 b, 整数型, , , 头部大小
.局部变量 c, 整数型, , , 图片数据width
.局部变量 d, 整数型, , , 图片数据height
.局部变量 e, 整数型, , , 数据区域大小
.局部变量 f, 整数型, , , 数据区域大小
.局部变量 g, 整数型, , , 数据区域大小
.局部变量 h, 整数型
.局部变量 x, 整数型, , , x坐标
.局部变量 y, 整数型, , , y坐标
.局部变量 z, 整数型, , , 像素宽度
.局部变量 l, 整数型, , , 数据长度
.局部变量 num, 整数型, , , 循环次数
.局部变量 jici, 整数型
字节集 = 参_传入数据
a = 取字节集数据 (字节集, 3, 5)
l = 取字节集长度 (字节集)
.如果 (a > 0) ' 只有单张图片
b = 9
临时集 = 取字节集中间 (字节集, b, a)
g = 10000 × 10000 × 4
缓冲区 = 取空白字节集 (g)
.如果真 (取字节集左边 (临时集, 2) ≠ { 255, 216 }) ' JPG幻数
返回 ({ })
.如果真结束
picture_readjpeg (临时集, a, 缓冲区, g, c, d, z)
b = b + a
缓冲区 = 取字节集左边 (缓冲区, g)
临时集 = 取字节集中间 (字节集, b, l - b + 1)
.如果 (取字节集长度 (临时集) = 0)
h = c × d × 4 + 100
临时集 = 取空白字节集 (h)
picture_u3d_rgba (缓冲区, c × d × 3, 临时集, c, d, 3)
结果区 = 取空白字节集 (c × d × 5 + 100)
h = picture_rgba_png (临时集, 结果区, c, d, 0)
临时集 = 取字节集左边 (结果区, h)
.否则
临时集 = zlib_压缩算法 (临时集, c × d, , 真)
h = c × d × 4 + 100
结果区 = 取空白字节集 (h)
picture_rgb_a_rgba (缓冲区, 临时集, 结果区, h, c, d, z)
缓冲区 = 取字节集左边 (结果区, h)
结果区 = 取空白字节集 (c × d × 5 + 100)
h = picture_rgba_png (缓冲区, 结果区, c, d, 0)
临时集 = 取字节集左边 (结果区, h)
.如果结束
存文本 = 参_压缩数据.压缩文件名 + “_X” + 到文本 (x) + “_Y” + 到文本 (y) + “.png”
返回值 = 到字节集 (存文本)
返回值 = 到字节集 (取字节集长度 (返回值)) + 返回值
返回值 = 返回值 + 到字节集 (取字节集长度 (临时集)) + 临时集
.否则
b = 取字节集数据 (字节集, 3, 9)
b = b + 1
num = 取字节集数据 (字节集, 2, 41)
.计次循环首 (num, jici)
x = 取字节集数据 (字节集, 2, b)
y = 取字节集数据 (字节集, 2, b)
c = 取字节集数据 (字节集, 2, b)
d = 取字节集数据 (字节集, 2, b)
b = b + 4
e = 取字节集数据 (字节集, 3, b)
.如果真 (e = 0)
到循环尾 ()
.如果真结束
f = 取字节集数据 (字节集, 3, b)
.如果 (f = -140640256 或 f = 268435456 或 f = 813826048)
b = b - 4
临时集 = 取字节集中间 (字节集, b, e)
b = b + e
' 缓冲区 = 函_文本字节集 (“424D000000000000000046000000380000000000000000000000010010000300000000000000120B0000120B0000000000000000000000F80000E00700001F00000000000000”) ' RGB565
' 缓冲区 = 函_文本字节集 (“424D000000000000000046000000380000000000000000000000010010000300000000000000120B0000120B00000000000000000000007C0000E00300001F00000000800000”) ' RGB1555
缓冲区 = 函_文本字节集 (“424D000000000000000046000000380000000000000000000000010010000300000000000000120B0000120B00000000000000000000000F0000F00000000F00000000F00000”) ' RGBA4444
缓冲区 = 函_文本字节集 (“424D16640000000000003604000028000000710000006C0000000100100000000000AC02000000000000000000000000000000000000”)
缓冲区 = 字节集替换 (缓冲区, 19, 4, 到字节集 (到整数 (c)))
缓冲区 = 字节集替换 (缓冲区, 23, 4, 到字节集 (到整数 (d)))
缓冲区 = 字节集替换 (缓冲区, 11, 4, 到字节集 (到整数 (54 + 512)))
缓冲区 = 字节集替换 (缓冲区, 3, 4, 到字节集 (到整数 (54 + e)))
临时集 = 缓冲区 + 临时集
存文本 = 参_压缩数据.压缩文件名 + 到文本 (jici) + “_X” + 到文本 (x) + “_Y” + 到文本 (y) + “.bmp”
.否则
e = e - 8
f = 取字节集数据 (字节集, 3, b)
临时集 = 取字节集中间 (字节集, b, f)
g = c × d × 5
.如果真 (取字节集左边 (临时集, 2) ≠ { 255, 216 }) ' JPG幻数
返回 ({ })
.如果真结束
.如果真 (g = 0)
g = b × 100
.如果真结束
e = e - f
缓冲区 = 取空白字节集 (g)
picture_readjpeg (临时集, f, 缓冲区, g, c, d, z)
b = b + f
缓冲区 = 取字节集左边 (缓冲区, g)
临时集 = 取字节集中间 (字节集, b, e)
b = b + e
临时集 = zlib_压缩算法 (临时集, c × d, , 真)
h = c × d × 4 + 100
结果区 = 取空白字节集 (h)
picture_rgb_a_rgba (缓冲区, 临时集, 结果区, h, c, d, z)
缓冲区 = 取字节集左边 (结果区, h)
结果区 = 取空白字节集 (c × d × 5 + 100)
h = picture_rgba_png (缓冲区, 结果区, c, d, 0)
临时集 = 取字节集左边 (结果区, h)
存文本 = 参_压缩数据.压缩文件名 + 到文本 (jici) + “_X” + 到文本 (x) + “_Y” + 到文本 (y) + “.png”
.如果结束
返回值 = 返回值 + 到字节集 (取文本长度 (存文本)) + 到字节集 (存文本)
返回值 = 返回值 + 到字节集 (取字节集长度 (临时集)) + 临时集
.计次循环尾 ()
.如果结束
返回 (返回值)
|
|