首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将PIL图像对象上传到python3上的Imgur?

如何将PIL图像对象上传到python3上的Imgur?
EN

Stack Overflow用户
提问于 2019-11-27 03:28:29
回答 2查看 750关注 0票数 1

当我试图上传一个图片到imgur时,我得到了以下错误。

代码语言:javascript
复制
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。

代码语言:javascript
复制
#!/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提供的官方客户库,原因有两个。

  1. 库只为我提供了两个选项--( a)通过指定URL和b)从本地文件上传。在我的例子中,我想上传的图片都不是。它是由PIL处理的图像,在内存中作为PIL对象存在。我不想在这个特定的实现中使用文件系统。
  2. 对API的简单POST请求将为我完成这项工作,我希望避免对库的依赖,并尽可能地保持包的轻巧。
EN

回答 2

Stack Overflow用户

发布于 2020-03-13 03:13:21

这样做是可行的:

代码语言:javascript
复制
# imports
import requests
import io
from PIL import Image

# Get Image from request
img_response = requests.get(
    "https://encrypted-tbn0.gstatic.com/images? q=tbn%3AANd9GcTVYP3ZsF72FSKPzxJghYkjz_-a1op7YxBK45O0Y4nTjAQ7PZKD"
)

# Some Pillow Resizing
img = Image.open(io.BytesIO(img_response.content))
img_width, img_height = img.size
crop = min(img.size)
square_img = img.crop(
    (
        (img_width - crop) // 2,
        (img_height - crop) // 2,
        (img_width + crop) // 2,
        (img_height + crop) // 2,
    )
)  # Square Image is of type Pil Image

imgByteArr = io.BytesIO()
square_img.save(imgByteArr, format="PNG")
imgByteArr = imgByteArr.getvalue()

url = "https://api.imgur.com/3/image"


payload = {"image": imgByteArr}
headers = {"Authorization": "Client-ID xxxxxxxxx"}
response = requests.request("POST", url, headers=headers, data=payload)

print(response.text.encode("utf8"))
票数 1
EN

Stack Overflow用户

发布于 2019-11-27 10:01:31

查看API文档,您的url的/upload部分似乎被更改为/image。

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

(请参见右侧的“示例请求”)

但似乎这一切都是不可取的,在同一页上的信息是自相矛盾的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59062553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档