2017-02-04 128 views
1

我嘗試下載圖像,但由於某些原因它們已損壞?例如:This is an image I want to get.而結果是this。我的測試代碼是:用Python下載的圖像已損壞?

import urllib2 

def download_web_image(url): 
    request = urllib2.Request(url) 
    img = urllib2.urlopen(request).read() 
    with open ('test.jpg', 'w') as f: f.write(img) 

download_web_image("http://upload.wikimedia.org/wikipedia/commons/8/8c/JPEG_example_JPG_RIP_025.jpg") 

這是爲什麼,我該如何解決這個問題?

+1

您可能想要在二進制模式下打開'test.jpg':'open('test.jpg','wb')' –

+0

@WanderNauta謝謝,它解決了它。 :) – StackHogger

+0

太棒了!我會把它寫出來作爲實際的答案。 –

回答

2

您在默認(文本)模式,這將導致Python中使用「正確的」換行符在Windows上打開「test.jpg放在」文件:

在文本模式下,讀取時爲默認將平臺特定的 行結尾(在Un​​ix上是\ n,在Windows上是\ r \ n)轉換爲\ n。在 文本模式下編寫時,默認情況下將\ n的出現次數轉換回 特定於平臺的行尾。

當然,JPEG文件不是文本文件,'修復'換行符只會破壞圖像。取而代之的是,以二進制方式打開文件:

with open('test.jpg', 'wb') as f: 
    f.write(img) 

有關詳細信息,請參閱documentation