代码之家  ›  专栏  ›  技术社区  ›  John Yuki

如何用Python将internet上的图像保存到本地文件

  •  -1
  • John Yuki  · 技术社区  · 9 年前

    我想直接从reddit和imgur获取图像链接,保存到文件中,然后上传到twitter。我这样做没有什么真正的原因,我只是想练习一下,因为我是编程新手。但我不确定如何将图像链接保存到文件。我遇到了一个StackOverflow问题,问了同样的问题,给的答案是使用 urllib.retrieve

    这是我正在使用的代码:

    def post_to_twitter():
        if 'i.redd.it/' in submission.url or 'i.imgur.com/' in submission.url:
            print(submission.url)
            urllib.urlretrieve(str(submission.url),'<my directory>')
        elif 'i.redd.it/' not in submission.url or 'i.imgur.com/' not in submission.url:
            print('No direct imgur or reddit image link')
    

    然而,当我运行这段代码时,我遇到了一个以前从未遇到过的unicode错误- (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

    显然这是错误的代码,我确信使用图像链接保存到文件并不像使用一行代码那么容易。我做错了什么,或者有更好的方法吗?如果可能的话,你能像我五岁一样解释一下吗。我是编程新手,还不懂一些让我困惑的单词。


    .

    实际上,我用我使用的原始代码实现了这一点,但做了一些微调。

    我使用了:

    urllib.request.urlretrieve(submission.url, 'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg')
    

    submission.url my_url = "http://i.imgur.com/qjMiF2A.gif"

    'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg' 是要保存的图像的名称。也可以在其中指定路径。但是,因为我无法手动指定文件另存为什么,所以我使用提交。id作为文件名,这样我可以保证它始终是唯一的。然后我只需添加 .jpeg 最后指定文件类型。

    3 回复  |  直到 9 年前
        1
  •  0
  •   mmmorgen    9 年前

    试试这个:

    import os
    import urllib.request
    import urllib.error
    def saveImg(url,path,name):
        #url is imgurl 
        #path is your folder 
        #name is like tmp.png
        if not os.path.exists(path):
            os.mkdir(path)
        try:
            response=urllib.request.urlopen(url);
        except urllib.error.URLError as e:
            return 0
        except urllib.error.HTTPError as e:
            return 0
        code=response.read()
        filehandle=open(path+name,'wb');
        filehandle.write(code)
        filehandle.close()
        return 1
    
        2
  •  0
  •   Kairat Kempirbaev    9 年前

    你需要轻点 PIL Requests 第一

    from PIL import Image
    import requests
    from io import BytesIO
    r=requests.get(name)
    image=Image.open(BytesIO(r.content))
    image.save('{0}.jpg'.format("Image"))
    
        3
  •  0
  •   John Yuki    9 年前

    我使用了:

    urllib.request.urlretrieve(submission.url, 'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg')
    

    submission.url

    'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg' 是要保存的图像的名称。也可以在其中指定路径。但是,因为我无法手动指定文件另存为什么,所以我使用提交。id作为文件名,这样我可以保证它始终是唯一的。然后我只需添加 .jpeg