add all of the lua stuff aswell
This commit is contained in:
parent
63c0901393
commit
25d1b0f185
4 changed files with 437 additions and 1 deletions
89
lua/decode.lua
Normal file
89
lua/decode.lua
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
|
||||
local function getUint16(bytes, idx)
|
||||
return bytes[idx] * 256 + bytes[idx + 1]
|
||||
end
|
||||
|
||||
local function getUint8(bytes, idx)
|
||||
return bytes[idx]
|
||||
end
|
||||
|
||||
local function componentToHex(c)
|
||||
return string.format("%02x", c)
|
||||
end
|
||||
|
||||
local function rgbToHex(r, g, b)
|
||||
return "#" .. componentToHex(r) .. componentToHex(g) .. componentToHex(b)
|
||||
end
|
||||
|
||||
local function unpack_block(whole_buffer, startByte)
|
||||
local paletteIdx = getUint16(whole_buffer, startByte)
|
||||
local packedInfo = getUint8(whole_buffer, startByte + 2)
|
||||
local blockAmount = math.floor(packedInfo / 16)
|
||||
local byteRemoval = packedInfo % 16
|
||||
|
||||
local textArr = {}
|
||||
|
||||
for i = 1, blockAmount do
|
||||
local byte = getUint8(whole_buffer, startByte + 2 + i)
|
||||
for bit = 7, 0, -1 do
|
||||
table.insert(textArr, ((math.floor(byte / (2 ^ bit)) % 2) == 1) and "\n" or "▇")
|
||||
end
|
||||
end
|
||||
|
||||
if byteRemoval > 0 then
|
||||
for i = 1, byteRemoval do
|
||||
table.remove(textArr)
|
||||
end
|
||||
end
|
||||
|
||||
local endByte = startByte + 2 + blockAmount
|
||||
return { paletteIdx = paletteIdx, text = table.concat(textArr), endByte = endByte }
|
||||
end
|
||||
|
||||
|
||||
local function unpack_blocks(packed)
|
||||
local size = getUint16(packed, 1)
|
||||
|
||||
local palette = {}
|
||||
local idx = 3
|
||||
|
||||
for i = 1, 300 do
|
||||
table.insert(palette, {
|
||||
getUint8(packed, idx + 1),
|
||||
getUint8(packed, idx + 2),
|
||||
getUint8(packed, idx + 3)
|
||||
})
|
||||
idx = idx + 3
|
||||
end
|
||||
|
||||
local blocks_unpacked = {}
|
||||
idx = idx + 1
|
||||
|
||||
while idx <= #packed do
|
||||
local block = unpack_block(packed, idx)
|
||||
idx = block.endByte + 1
|
||||
block.color = rgbToHex(table.unpack(palette[block.paletteIdx + 1]))
|
||||
block.paletteIdx = nil
|
||||
block.endByte = nil
|
||||
table.insert(blocks_unpacked, block)
|
||||
end
|
||||
|
||||
return blocks_unpacked
|
||||
end
|
||||
|
||||
return { unpack_blocks = unpack_blocks }
|
||||
|
||||
--[[
|
||||
local base64 = require("base64")
|
||||
local lz4 = require("lz4")
|
||||
|
||||
local bytes = base64.decode(image)
|
||||
local byte_table = {}
|
||||
for num in string.gmatch(bytes, "%d+") do
|
||||
table.insert(byte_table, tonumber(num))
|
||||
end
|
||||
local decomp = lz4.decompress(byte_table)
|
||||
|
||||
local unpacked = unpack_blocks(decomp)
|
||||
local json = <..json serializer..>:serialize(unpacked);
|
||||
]]
|
||||
Loading…
Add table
Add a link
Reference in a new issue