下面的代码采用JPEG图像并将其转换为字符串。然后将该字符串保存到image
变量中。然后,使用文件IO将字符串写入a.jpg
,然后通过将stdout传送到文件,将其写入b.jpg
。
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)。这些图像应该相同......但它们不是。
通过在记事本中查看每个图像,我可以看到,不知何故,这些换行符被添加到b.jpg中。导致图像损坏。
为什么a.jpg与b.jpg不同?
答案 0 :(得分:2)
您将数据作为二进制文件写入a.jpg
,而b.jpg
则以文本模式写入。在二进制模式下,否则特殊字符(如换行符或EOF标记)不会被视为特殊字符,而在文本模式下则是特殊字符。
在Python 3中,您可以切换模式:
默认情况下,标准流处于文本模式。要将二进制数据写入或读取,请使用基础二进制缓冲区。例如,要将字节写入stdout,请使用sys.stdout.buffer.write(b'abc')。
未经测试(Python 2):
import sys, os
binout = os.fdopen(sys.stdout.fileno(), 'wb')
binout.write(b'Binary#Data...')