我正在使用網站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)
太感謝你了! –