2012-06-07 32 views
1

你好,我現在用的是Python圖像庫,使一個小轉換爲圖像16位無符號原始的二進制圖像文件。該圖像是一個16位無符號整數的原始二進制文件。出於某種原因,我不能讓Python工作,它不斷給我下面的錯誤:什麼模式在python PIL

Traceback (most recent call last): 
    File "C:\Users\Patrick\workspace\colorCorrect\src\editGrayscale.py", line 24, in <module> 
    changed.save(saveFile) 
    File "C:\Python27\lib\site-packages\PIL\Image.py", line 1423, in save 
    raise KeyError(ext) # unknown extension 
KeyError: '.bin' 

我的代碼如下:

import Image 
#file to save: C:\Users\name\imagedata\visiblespec.bin 

fileName = raw_input("Enter a file name: ") 
saveFile = raw_input("Enter a new save file name: ") 

with open(fileName, 'rb') as f: 
im = Image.fromstring('L', (3032, 2016), f.read()) # also try 'L;16B', 'I;16', and 'I;16B' 
changed = im.point(lambda i: i/2) 

changed.save(saveFile的)

再次我的形象是11 mbs左右的灰度16位無符號整數,用十六進制表示。

謝謝!

UPDATE:

def save(filename, contents): 
    fh = open(filename, 'w') 
    fh.write(contents) 
    fh.close() 

save(saveFile, final) 
+0

發生了什麼?我以爲我昨天給你答案的工作:http://stackoverflow.com/a/10902279/5987 –

+0

@MarkRansom我周圍開關的東西,你的代碼工作很大的時候我只是想顯示它,但是當我嘗試將其保存我不能以我原先想要的相同文件格式來完成。 – clifgray

回答

0

所有PIL的有效模式的源文件unpack.c中列出,接近該文件的底部:即致力於保存文件

代碼。我會從包含16的那些開始。

鑑於您的修改有其他問題。首先,PIL.Image需要確定用於寫出文件的編碼器,並使用文件擴展名來完成此操作。您的.bin文件擴展名是非標準的,因此無法知道要使用哪種格式。試試像.png

第二個問題是,並非每一個文件類型,支持所有的圖像格式。保存之前,您可能需要轉換圖像。

changed.convert('L').save(saveFile) 

鑑於您的最後一條評論,您只是想將這些值寫回原始格式文件。您可以嘗試使用'raw'格式或僅使用tostring自行寫入文件。

changed.save(saveFile, 'raw') 
+0

好吧,當我把在saveFile的爲.png,但我必須把它作爲一個.bin文件,以便能夠做加工的,下一步該把它通過拜耳過濾器,它工作正常。所以你的回答是正確的,但我的問題是比我最初陳述 – clifgray

+0

使用你的一些意見,並添加一點點額外的一點點複雜我能夠保存文件。哈哈現在我只需要弄清楚如何讓它像L; 16B那樣工作,而不僅僅是L,但那是另一個問題。 – clifgray