您可以通過簡單地顛倒您使用的步驟,將這些位保存爲PNG文件。
順便說一句,有沒有必要創建Data
列表:你可以用普通的Python功能&運營商以及與numpy的訪問Bits
數組中的位。但是如果你真的需要這些位在一個普通的Python列表中,那麼就不需要那麼慢的for ... append
循環:只需將該數組傳遞給list
構造函數即可。
我已經改變了你的變量名,使它們符合PEP-8風格指南。
import numpy as np
# File names
in_name = 'square.png'
out_name = 'square_out.png'
# Read data and convert to a list of bits
in_bytes = np.fromfile(in_name, dtype = "uint8")
in_bits = np.unpackbits(in_bytes)
data = list(in_bits)
# Convert the list of bits back to bytes and save
out_bits = np.array(data)
print(np.all(out_bits == in_bits))
out_bytes = np.packbits(out_bits)
print(np.all(out_bytes == in_bytes))
out_bytes.tofile(out_name)
不過,我不知道爲什麼你想這樣做。如果你想訪問PNG文件中的圖像數據,那麼你需要正確解碼。一個簡單的方法是使用PIL(Pillow)將圖像文件加載到PIL Image對象中; Numpy可以從PIL圖像創建一個數組。然後,您可以使用標準Numpy工具分析或處理原始圖像數據,然後將其傳回PIL以將其保存爲PNG(或各種其他圖像文件格式)。舉例來說,請參閱this answer中的最終代碼塊。
這是一個正常的.png圖像,我將其轉換爲單個位 –