如何在 flask python 中将 blob 转换为 byteArray?
How to convert blob into byteArray in flask python?
一位客户向我发送了一个多部分文件,我阅读了它:
blob = request.files['file'].read()
我手头有一个 blob 文件。现在我必须发送带有 open('file.png', 'rb')
这样的请求的文件。如何将 blob
转换为 rb
模式。使用 open
我无法直接打开 blob。
以下代码无效:
opened_file = open(request.files['file'], 'rb')
我收到以下错误:
TypeError: coercing to Unicode: need string or buffer, FileStorage found
有没有办法做到这一点而不将其保存到文件系统?我将我的请求发送到其他地方:
files = dict({'file': byteArrayFile})
r = requests.post(self.url, files=files, headers=headers)
request.files['file']
已经是一个类文件对象(它是 a FileStorage
instance),所以你可以直接使用它;您不需要 open
它。
r = requests.post(self.url, files={"file": request.files["file"]}, headers=headers)
您可以将类文件对象视为打开的文件。他们的行为方式相同。
尝试使用
from PIL import Image
import requests
from io import BytesIO
response = requests.get(url)
img = Image.open(BytesIO(response.content))
它对我有用,如果你想看一下图片,可以试试
img.show()
如果您的图像以 Blob 格式存储(即在数据库中),您可以使用 Billal Begueradj 解释的相同技术将图像从 Blob 转换为字节数组。
就我而言,我需要将图像存储在数据库的 blob 列中 table:
def select_all_X_values(conn):
cur = conn.cursor()
cur.execute("SELECT ImageData from PiecesTable")
rows = cur.fetchall()
return rows
然后我创建了一个辅助函数来将我的数据集更改为 np.array:
X_dataset = select_all_X_values(conn)
imagesList = convertToByteIO(np.array(X_dataset))
def convertToByteIO(imagesArray):
"""
# Converts an array of images into an array of Bytes
"""
imagesList = []
for i in range(len(imagesArray)):
img = Image.open(BytesIO(imagesArray[i])).convert("RGB")
imagesList.insert(i, np.array(img))
return imagesList
在此之后,我可以在我的神经网络中使用 byteArrays。
plt.imshow(imagesList[0])
一位客户向我发送了一个多部分文件,我阅读了它:
blob = request.files['file'].read()
我手头有一个 blob 文件。现在我必须发送带有 open('file.png', 'rb')
这样的请求的文件。如何将 blob
转换为 rb
模式。使用 open
我无法直接打开 blob。
以下代码无效:
opened_file = open(request.files['file'], 'rb')
我收到以下错误:
TypeError: coercing to Unicode: need string or buffer, FileStorage found
有没有办法做到这一点而不将其保存到文件系统?我将我的请求发送到其他地方:
files = dict({'file': byteArrayFile})
r = requests.post(self.url, files=files, headers=headers)
request.files['file']
已经是一个类文件对象(它是 a FileStorage
instance),所以你可以直接使用它;您不需要 open
它。
r = requests.post(self.url, files={"file": request.files["file"]}, headers=headers)
您可以将类文件对象视为打开的文件。他们的行为方式相同。
尝试使用
from PIL import Image
import requests
from io import BytesIO
response = requests.get(url)
img = Image.open(BytesIO(response.content))
它对我有用,如果你想看一下图片,可以试试
img.show()
如果您的图像以 Blob 格式存储(即在数据库中),您可以使用 Billal Begueradj 解释的相同技术将图像从 Blob 转换为字节数组。
就我而言,我需要将图像存储在数据库的 blob 列中 table:
def select_all_X_values(conn):
cur = conn.cursor()
cur.execute("SELECT ImageData from PiecesTable")
rows = cur.fetchall()
return rows
然后我创建了一个辅助函数来将我的数据集更改为 np.array:
X_dataset = select_all_X_values(conn)
imagesList = convertToByteIO(np.array(X_dataset))
def convertToByteIO(imagesArray):
"""
# Converts an array of images into an array of Bytes
"""
imagesList = []
for i in range(len(imagesArray)):
img = Image.open(BytesIO(imagesArray[i])).convert("RGB")
imagesList.insert(i, np.array(img))
return imagesList
在此之后,我可以在我的神经网络中使用 byteArrays。
plt.imshow(imagesList[0])