我正在使用网站http://placekitten.com制作程序,但我遇到了一些问题。使用此:Python urllib2图像扭曲
im = urllib2.urlopen(url).read()
f = open('kitten.jpeg', 'w')
f.write(im)
f.close()
图像原来扭曲的不匹配的颜色,就像这样:
我想知道是否有与提取的urllib2图像的选择。如果有人能够帮助,那会很棒!
我正在使用网站http://placekitten.com制作程序,但我遇到了一些问题。使用此:Python urllib2图像扭曲
im = urllib2.urlopen(url).read()
f = open('kitten.jpeg', 'w')
f.write(im)
f.close()
图像原来扭曲的不匹配的颜色,就像这样:
我想知道是否有与提取的urllib2图像的选择。如果有人能够帮助,那会很棒!
你需要以二进制方式打开文件:
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
语句为您处理关闭文件对象。
变化
f = open('kitten.jpeg', 'w')
阅读
f = open('kitten.jpeg', 'wb')
更多信息请参见http://docs.python.org/2/library/functions.html#open。发生什么情况是jpeg中的换行符在保存过程中得到了修改,而打开为二进制文件将阻止这种情况发生。
如果你使用的是Windows,你必须以二进制方式打开文件:
f = open('kitten.jpeg', 'wb')
或者更Pythonically:
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)
太感谢你了! –