Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Python将internet上的图像保存到本地文件_Python_Image_Save - Fatal编程技术网

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

如何用Python将internet上的图像保存到本地文件,python,image,save,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 submi

我想从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')
submission.url
返回指向图像的链接,因此您可以将其替换为您想要的任何内容,只要它作为字符串等于直接图像链接,例如
my_url=”http://i.imgur.com/qjMiF2A.gif“

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

试试这个:

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

您需要先pip
PIL
请求
最干净的方法是

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

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

我用过:

urllib.request.urlretrieve(submission.url, 'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg')
urllib.request.urlretrieve(submission.url, 'Reddit To Twitter Downloaded Images\\'+submission.id+'.jpeg')
submission.url
返回指向图像的链接,因此您可以将其替换为您想要的任何内容,只要它作为字符串等于直接图像链接


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

Imgur不起作用,他们正在使用reacter,除非它确实起作用。我编辑了我的原始问题以包含解决方案,并自己发布了一个答案。当我尝试
pip install PIL
时,我收到了这条消息-不管怎样,我实际上是用我在原始帖子中的那一行代码完成的,但我对它做了一些修改以使其正常工作。如果你想知道我是如何做到的,我把这个解决方案作为一个答案发布了出来。不过,我实际上是用我在原始帖子中的那一行代码来实现的,但是我对它做了一些修改,使它能够工作。如果你想知道我是怎么做的,我就把这个解决方案贴出来作为答案。