如何在python3上将PIL图像对象上传到Imgur API?

时间:2019-11-27 03:28:29

标签: imgur

当我尝试将图像上传到imgur api时出现以下错误。

b'{"data":{"error":"Invalid URL (<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1600x6495 at 0x10E726050>)","request":"\\/3\\/upload","method":"POST"},"success":false,"status":400}'

我的代码如下。客户ID已删除。

#!/usr/bin/env python3
import io
from PIL import Image
import requests
import json
import base64

url = "http://www.tallheights.com/wp-content/uploads/2016/06/background_purple.jpg"
r = requests.get(url)
image = Image.open(io.BytesIO(r.content))
imagestring = str(image)

url = 'https://api.imgur.com/3/upload'
body = {'type':'file','image': imagestring , 'name' : 'abc.jpeg'}
headers = {'Authorization': 'Client-ID <redacted>'}

req = requests.post(url, data=body, headers=headers)
print (req.content)

我的代码在Python3中,由于两个原因,我没有使用Imgur提供的official client library

  1. 该库仅向我提供两个选项-a)通过指定URL上传和b)从本地文件上传。就我而言,我要上传的图像都不是。它是由PIL处理的图像,在内存中作为PIL对象存在。我不想将文件系统用于此特定实现。
  2. 对API的简单POST请求将为我完成这项工作,我想避免对库的依赖,并尽可能使程序包轻巧。

2 个答案:

答案 0 :(得分:1)

这有效:

__html__

答案 1 :(得分:0)

检查API文档,似乎您网址的/ upload部分已更改为/ image。

https://apidocs.imgur.com/?version=latest#c85c9dfc-7487-4de2-9ecd-66f727cf3139

(请参见右侧的“样品申请”)

但是似乎这一切都已被弃用,并且同一页面上的信息本身也矛盾。