[英]Python Decoding binary data back to file
我在 MSSQL 中有一个包含压缩和转换文件的数据库,如下所示:
我需要将这些文件解码为 pdf、docx 和 png 文件。
我试图通过 base64 来做到这一点,但它没有构建正确的文件。
你有什么想法我怎么能解码所有这些并构建正确的文件?
您的数据似乎是一个 PNG,前面有一些东西。 如果用dd
去除前 12 个字节,然后用xxd
将十六进制恢复为二进制,则可以恢复 PNG 文件的开头:
dd bs=12 skip=1 if=YOURFILE | xxd -r -p > image.png
然后,您可以检查该 PNG 文件并查看它的大小以及它被截断的事实,如下所示:
pngcheck -v image.png
样品 Output
File: image.png (21833 bytes)
chunk IHDR at offset 0x0000c, length 13
2164 x 835 image, 24-bit RGB, non-interlaced
chunk sRGB at offset 0x00025, length 1
rendering intent = perceptual
chunk gAMA at offset 0x00032, length 4: 0.45455
chunk pHYs at offset 0x00042, length 9: 3779x3779 pixels/meter (96 dpi)
chunk IDAT at offset 0x00057, length 65445: EOF while reading data
ERRORS DETECTED in image.png
数据是十六进制编码的,试试:
from base64 import b16decode
# Data
encoded = '0x48656C6C6F'
decoded = b16decode(encoded[2:])
print(decoded)
输出b'Hello'
当您学习将 blob 填充到文本数据库中的艰难方法时,可能是数据管理员作为新手可能犯下的最严重的罪过,臃肿笨拙且速度缓慢,最好将源文件留在其快速自然的本机压缩 state 中并简单地在DB 通过相关的唯一 ID 和文件存储名称。 吐槽一下。
它们是 40K 的固定大小块这一事实表明它们被分块,因此需要几个奇数块来创建一个完整的 BLOB。
如果我解释正确,您呈现的 blob 似乎只是 PNG 图像的一部分 =
2164 pixels wide by 835 pixels high
然而,output 在奇怪的可疑尺寸 canvas 内只有 5 个像素高,如果它只是截断更长的 ZF7B44CFAFD5C52223D5498196C8A2E 的第一部分,这可能是正确的
您的 40K 块转换为具有 PNG 特征的 22K 二进制文件,但 PNG 以 89 开头,因此您遇到了问题,因为它的前缀为 0x 00 22 40 DD BF
我们可以丢弃 0x 作为 Hex stream 的签名,并像我上面所做的那样使用余数,但是 ODD 00 22 40 DD BF 的意义是什么(很可能部分包含最终全长大小或指针的指示符到下一个块)
您需要做的是通过常规方法提取该图像并比较预期的总文件大小,因为转换为 22Kb 二进制文件可能仅相当于预期总数的一小部分。 在这种情况下,您需要确定图像的 rest 的存储方式和位置,以便将所有部分连接成一个同质 blob,即单个图像。
您需要了解块被缓慢提取并缓慢转换并缓慢拼接在一起的方法,但使用一些预期文件大小的度量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.