【问题标题】:Python urllib2 Images DistortedPython urllib2 图像失真
【发布时间】:2013-06-01 22:28:44
【问题描述】:
【问题讨论】:
标签:
python
image
urllib2
extraction
【解决方案1】:
需要以二进制方式打开文件:
f = open('kitten.jpeg', 'wb')
否则,Python 会将行尾转换为本机平台形式,这是一种破坏二进制数据的转换,如 open() function 所述:
默认是使用文本模式,它可以将'\n' 字符转换为特定于平台的表示在写入和读取时返回。因此,在打开二进制文件时,应在模式值后面加上'b',以二进制模式打开文件,这样可以提高可移植性。
将数据从 URL 复制到文件时,您可以使用 shutil.copyfileob() 来有效地处理流式传输:
from shutil import copyfileobj
im = urllib2.urlopen(url)
with open('kitten.jpeg', 'wb') as out:
copyfileobj(im, out)
这将以块的形式读取数据,避免用大量二进制数据填充内存。 with 语句为您处理关闭文件对象。
【解决方案3】:
如果您使用的是 Windows,则必须以二进制模式打开文件:
f = open('kitten.jpeg', 'wb')
或者更Python化:
import urllib2
url = 'http://placekitten.com.s3.amazonaws.com/homepage-samples/200/140.jpg'
image = urllib2.urlopen(url).read()
with open('kitten.jpg', 'wb') as handle:
handle.write(image)