2017-04-25 24 views
1

創建從單個比特的圖像我已通過使用該創建的比特的陣列:在Python 3

Data = [] 
Bytes = numpy.fromfile(filename, dtype = "uint8") 
Bits = numpy.unpackbits(Bytes) 
for b in Bits: 
    Data.append(b) 

「文件名」和「.PNG」結束。

後來,我做了一些這些東西的東西。我想用另一個(或相同的)位來保存圖像。我該怎麼做?最好的選擇是使用:saveToPNG(Data)

+0

這是一個正常的.png圖像,我將其轉換爲單個位 –

回答

1

您可以通過簡單地顛倒您使用的步驟,將這些位保存爲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中的最終代碼塊。

+1

我正在模擬使用ARQ協議的發射機和接收機。一個小型研究項目。 –