gpt4 book ai didi

python - 是否可以使用 python open 函数打开内存中的图像?

转载 作者:行者123 更新时间:2023-11-28 22:55:40 25 4
gpt4 key购买 nike

我正在使用一个 python 库 ( poster ),它将一个类似文件的对象作为参数,文档指出:

类文件对象必须支持 .read() 和 .fileno() 或两者.seek() 和 .tell()。

我已经使用 python open 函数尝试了这个库,它工作正常。我目前正在使用以下 URL 从 URL 下载图像:

access_token = "XXXXXXXXXXXXXXXXXXXXX"
postPhotoUrl = "https://graph.facebook.com/me/photos?access_token=%s" % access_token

register_openers()

# get image from external URL
data = urllib2.urlopen("http://example.com/image.png")
data = StringIO(data.read())

### data, headers = multipart_encode({"source":open("file.png")}) <- WORKS FINE
data, headers = multipart_encode({"source":data})
request = urllib2.Request(postPhotoUrl,data,headers)

编辑:我的目标是从外部 URL 获取图像并使用 facebook graph api 发布它。当我使用 python open 函数时,我没有遇到任何问题。当我尝试使用 StringIO 时,POST 请求没有发送正文。

最佳答案

如果想法是使用 poster包进行流式 HTTP 上传,您不应将图像数据转换为 PIL Image 对象。只是做...

data = urllib2.urlopen("http://example.com/image.png")
data = StringIO(data.read())

...然后您可以将data 变量传递给poster

当然,除非您想先使用 PIL 转换图像,但您应该在问题中提及这一点。

更新

至于为什么它因 StringIO 而失败,可能是 poster 正在检查打开文件的文件名,并使用它来确定正确的 Content-Type 或类似的东西,当从 StringIO 读取时它无法做到这一点。

我从来没有使用过这个包,例子也不是很全面,但是当你调用类似...的时候,检查 headers 变量之间的区别可能是值得的。

from poster.encode import multipart_encode

data = open('example.png', 'rb')
datagen, headers = multipart_encode({"image1": data})

...与...

from poster.encode import multipart_encode

data = urllib2.urlopen("http://example.com/image.png")
data = StringIO(data.read())
datagen, headers = multipart_encode({"image1": data})

更新#2

看来我对 Content-Type 的看法是正确的。来自 encode.py 第 168-174 行的 poster 源代码...

        if hasattr(value, 'read'):
# Looks like a file object
filename = getattr(value, 'name', None)
if filename is not None:
filetype = mimetypes.guess_type(filename)[0]
else:
filetype = None

...尽管如果 filenameNone 可能会出现其他问题。试试这个...

from poster.encode import multipart_encode, MultipartParam

data = urllib2.urlopen("http://example.com/image.png")
data = StringIO(data.read())
param = MultipartParam(name='source',
filename='image.png',
filetype='image/png',
fileobj=data)
datagen, headers = multipart_encode({"source": param})

关于python - 是否可以使用 python open 函数打开内存中的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16636595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com