[英]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.