如何在Internet上将图像保存到本地文件中

时间:2017-07-26 09:19:33

标签: python image save

我想从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然后IDLE突出显示我在提交URL和我选择的目录之间使用的逗号。

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

我找到了解决方案

我实际上设法使用我使用的原始代码,但略有调整。

我用过:

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'是您要保存的图片的名称。您还可以在其中指定路径。但是,因为我无法手动指定我想要保存文件的内容,所以我使用submission.id作为文件名,这样我就可以保证它始终是唯一的。然后我在其末尾添加.jpeg以指定文件类型。

3 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

您需要先点击PILRequests 最干净的方式是

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"))

答案 2 :(得分:0)

我实际上设法使用我使用的原始代码,但略有调整。

我用过:

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

submission.url返回图像的链接,因此您可以将其替换为您想要的任何内容,只要它与字符串中的直接图像链接相同即可。

'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg'是您要保存的图片的名称。您还可以在其中指定路径。但是,因为我无法手动指定我想要保存文件的内容,所以我使用submission.id作为文件名,这样我就能保证它始终是唯一的。然后我在其末尾添加.jpeg以指定文件类型。