2017-02-04 12 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」ファイルを開いている:テキストモードでは

、とき読んでです。デフォルトちょうど\ nをするためにプラットフォーム固有の 行末(\ n個のUnix、\ rをWindows上の\ nに)変換します。 テキストモードで書き込む場合、デフォルトでは\ nの出現を のプラットフォーム固有の行末に変換します。

もちろん、JPEGファイルはテキストファイルではありません。「改行」は画像を改行するだけです。代わりに、バイナリモードでファイルを開く:

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

は、詳細については、documentationを参照してください。

関連する問題