2011-01-25 16 views
2

下面的代碼將JPEG圖像轉換爲一個字符串。該字符串然後被保存到image變量中。然後,使用File IO將該字符串寫入a.jpg,然後通過將stdout輸出到該文件,然後將其寫入b.jpgfile.write()和sys.stdout.write()給我兩個不同的輸出 - Python

import thumb 
import sys 

x = thumb.Thumbnail('test.jpg') 
x.generate(56, 56) 

image = str(x) 

with open('a.jpg', 'wb') as f: 
    # saving to a.jpg 
    f.write(image) 

# saving to b.jpg 
sys.stdout.write(image) 

用法:

python blah.py > b.jpg 

這將導致兩個圖像文件(A.JPG和B.JPG)。這些圖像應該是相同的......但它們不是。

a.jpg
b.jpg

我可以看到,通過查看在記事本中的每個圖像,即換行符是,不知何故,被添加到B.JPG。導致圖像損壞。

爲什麼a.jpg與b.jpg不同?

+4

sys.stdout.mode是 'W',我想。請參閱http://stackoverflow.com/questions/2374427/python-2-x-write-binary-output-to-stdout – DSM 2011-01-25 04:44:53

+0

當您通過標準輸出重定向您的shell時,您的shell可能會解釋您的輸出。你在Linux上?使用bash? – Falmarri 2011-01-25 04:45:43

回答

2

您將數據寫入a.jpg爲二進制,而b.jpg以文本模式寫入。當處於二進制模式時,特殊字符(如換行符或EOF標記)不被視爲特殊字符,而在文本模式下則是特殊字符。

在Python 3,您可以切換模式:

標準流是在默認情況下,文本模式。要將二進制數據寫入或讀取到這些數據,請使用基礎二進制緩衝區。例如,要將字節寫入標準輸出,請使用sys.stdout.buffer.write(b'abc')。


未經測試(Python的2):

import sys, os 

binout = os.fdopen(sys.stdout.fileno(), 'wb') 
binout.write(b'Binary#Data...') 
相關問題