Python 将PIL映像转换为字节数组?

Python 将PIL映像转换为字节数组?,python,image,bytearray,python-imaging-library,Python,Image,Bytearray,Python Imaging Library,我有一个PIL图像格式的图像。我需要把它转换成字节数组 img = Image.open(fh, mode='r') roiImg = img.crop(box) 现在我需要roiImg作为字节数组。谢谢大家的帮助 img = Image.open(fh, mode='r') roiImg = img.crop(box) 终于解决了 import io img = Image.open(fh, mode='r') roi_img = img.crop(box) img_byte_

我有一个PIL图像格式的图像。我需要把它转换成字节数组

img = Image.open(fh, mode='r')  
roiImg = img.crop(box)

现在我需要
roiImg
作为字节数组。

谢谢大家的帮助

img = Image.open(fh, mode='r')  
roiImg = img.crop(box)
终于解决了

import io

img = Image.open(fh, mode='r')
roi_img = img.crop(box)

img_byte_arr = io.BytesIO()
roi_img.save(img_byte_arr, format='PNG')
img_byte_arr = img_byte_arr.getvalue()

使用此功能,我不必将剪切图像保存在硬盘中,并且可以从PIL剪切图像中检索字节数组。

这是我的解决方案。请使用此功能

from PIL import Image
import io

def image_to_byte_array(image:Image):
  imgByteArr = io.BytesIO()
  image.save(imgByteArr, format=image.format)
  imgByteArr = imgByteArr.getvalue()
  return imgByteArr

我认为您可以简单地调用PIL映像的
.tobytes()
方法,然后使用内置的
bytes
将其转换为数组

#assuming image is a flattened, 3-channel numpy array of e.g. 600 x 600 pixels
bytesarray = bytes(Image.fromarray(array.reshape((600,600,3))).tobytes())

Python文件读取和提取二进制数组

导入base64
打开(img文件名,“rb”)作为f:
image_binary=f.read()
base64_encode=base64.b64编码(图像_二进制)
字节\解码=base64 \编码.解码('utf8')

请提供更多详细信息。字节数组应该是什么格式?原始像素值可通过
Image.getdata()
获得,该值返回PIL在特定平台上以特定格式对图像使用的内部表示。不确定,但听起来您需要使用
Image
的方法。我的目标是将图像以BLOB类型保存在mysql数据库中。
imgByteArr=open(“foo.png”'rb').read()
Need
roimg
格式与
imgByteArr
格式相同谢谢你的示例!我只是想做完全相同的事情。你能添加导入io吗?对于
format=“jpg”
保存到字节不起作用,而
“jpeg”
对文件和字节都起作用,而
“jpg”
仅适用于文件。我如何做相反的事情?有什么想法吗?从文档中不建议使用它,因为它会为每个像素保存原始图像数据。如果使用PNG、JPG、e.t.c,则需要在image.save()中使用BytesIO()啊,我明白了。出于我的目的,我不需要字节数据,因为我马上对RBG值进行数值处理。此外,这个问题没有提到任何关于保存图像的问题,只是转换它们。考虑一下,取消你的投票。