我在使用PIL從STDIN讀取png圖像時出現問題。當圖像由PIL寫入時,全部爲scrambled,但是如果我使用簡單文件打開寫入文件,則寫入並關閉文件將保存爲perfectly。Python PIL從STDIN讀取PNG
我有一個程序,可以將png文件轉儲到標準輸出中,不需要壓縮,我使用一個python腳本讀取數據流,讀取數據並在幾乎每個png上執行一些例程。轉儲數據的程序寫入某個字符串分隔符的PNG文件,該字符串是"{fim:FILE_NAME.png}"
劇本是這樣的:
:
import sys import re from PIL import Image png = None for linha in sys.stdin: if re.search('{fim:', linha): fname = linha.replace('{fim:','')[:-2] # writes data directly to file, works fine #f = open("/tmp/%s" % fname , 'w') #f.write(png) #f.close() # create a PIL Image from data and writes to disk, fails fine im = Image.frombuffer("RGB",(640,480),png, "raw", "RGB", 0, 1) #im = Image.fromstring("RGB",(640,480),png) im.save("/tmp/%s" % fname) png = None else: if png is None: png = linha else: png+= linha
ImageMagick的從錯誤的圖像識別/tmp/1349194042-24.png PNG 640×480 640×480 + 0 + 0 8位DirectClass 361KiB 0.010u 0:00.019
ImageMagick的IDE ntify從工作圖像:
/tmp/1349194586-01.png PNG 640×480 640×480 + 0 + 0 8位DirectClass 903KiB 0.010u 0:00.010
沒有任何一個有一個想法發生什麼事?這是關於小/大端的東西嗎?我試過Image.frombuffer
,Image.fromstring
,不同的模式,但沒有。似乎有關於PIL期望的緩衝區的更多信息。
謝謝,
您是否收到*像素*或* PNG的圖片*'stdin'?您的解碼器試圖將輸入解碼爲RGB像素,並且將忽略PNG頭(等等)。 – nneonneo