Open IsoLinearCHiP opened 1 year ago
As a followup. The oposite direction seems to be working better.
Wrote a few bytes to a file.
with open('test.txt', 'wb') as f:
f.write(b'Hello World! This is a test of compression with LibDeflate.lua')
Ran it through LibDeflate
lua .\LibDeflate.lua test.txt test.z
And then opened it up in python again:
import zlib
with open('test.z', 'rb') as f:
compressed = f.read()
decompressed = zlib.decompress(compressed, wbits=-8)
print(decompressed)
b'Hello World! This is a test of compression with LibDeflate.lua'
Did you figure this out @IsoLinearCHiP ? Otherwise, I will port it over when I have some time.
Ah excellent, others with the same questions!
I started work porting this, but realised that for what I wanted, it was overkill, so I'm using the actual lua library via lupa for now.
My 'project': https://github.com/whi-tw/wow-archon-itl-exporter
I will get around to porting eventually though. Maybe.
I found out how to do this btw:
After reading RFC 1950, I was able to understand how a zlib stream is constructed with python's zlib
library. This stream is prefixed with a 2-byte header (0x78
, 0x9C
) and is suffixed with the Adler-32 checksum of the uncompressed data (which equals 4 bytes).
So, to get it to work in Python:
import zlib
bytestring = b"hello"
compressed = zlib.compress(bytestring)
print('compressed is: ', compressed.hex())
with open('bs.z', 'wb') as f:
f.write(compressed[2:-4])
then, using lua:
lua .\LibDeflate.lua -d bs.z decompressed.txt
which works :)
for decompression of a lua deflated string, just use zlib.decompress(bytestring, wbits=-8)
Hope this helps.
Hi,
I am trying to make/find a python module to interoperate with your LibDeflate implementation.
I've tried using python 3.11 stdlib
zlib
library with no success.I tried the following snippet in python to generate a compressed file:
And then tried to decompress it with
lua .\LibDeflate.lua -d test_py.z test_py.txt
, but only got the error:If I change the
test_str
tob'aa'
I indeed getSuccessfully writes 2 bytes
, so far that's all I have managed.I also tried twiddling around with the
wbits
parameter from https://docs.python.org/3/library/zlib.html#zlib.compress but neither9
,-9
,25
nor leaving it out made any difference.I also tried using
LibDeflate:DecompressDeflate()
but so far I have again only been able to transfer the string'aa'
and nothing else.Would you be able to point me in the right direction?