如何从Python Azure存储中下载Blob图像并从中创建一个Image对象?

时间:2017-07-24 09:06:56

标签: python image azure png blob

我有一个块blob,它是一个png图像。当我将blob变为字节并尝试创建图像时,我得到数据不够。 我是python和图像分析的新手。问题是,如果图像分别为2024 * 1512,则斑点的大小为1714562,宽度为广告高度。 下面是我检索图像的代码:

#Get Required image
def findImage(containerName, imageName): 
    return block_blob_service.get_blob_to_bytes(
            containerName, 
            input_folder + '/' + imageName, 
            max_connections=1).content; 

我必须做下面描述的这样的事情来创建一个图像:

 np.array(imageToProcess).reshape(imageSize)

PIL.Image.frombytes('L', imageSize, np.byte(imageToProcess), 'raw', 'L', 0, 1)
  • imageToProcess是findImage函数的输出。

我试图让blob流或路径仍然有相同的问题。需要将此Blob重新整形为实际图像大小并传递给另一个过程函数。 如果有人帮助我解决问题和可能的解决方案,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

从Azure Blob Storage下载的PNG文件是一个png格式的二进制字节字符串,您需要使用OpenCV&amp ;;将其转换为numpy数组。 Numpy或PIL.Image对象。

以下是使用OpenCV& amp;的示例代码。 numpy或PIL.Image

  1. 使用OpenCV& numpy的

    import numpy as np
    import cv2
    
    data = findImage(containerName, imageName)
    print type(data)
    # <type 'str'>
    nparr = np.fromstring(data, np.uint8)
    # if the numpy version is 2.x
    img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR)
    # if the numpy version is 3.x
    img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    print type(img_np)
    # <type 'numpy.ndarray'>
    
  2. 使用PIL.Image&amp; StringIO

    from PIl import Image
    from StringIO import StringIO
    
    data = findImage(containerName, imageName)
    print type(data)
    # <type 'str'>
    img = Image.open(StringIO(data))
    print type(img)
    # <class 'PIL.PngImagePlugin.PngImageFile'>
    
  3. 希望它有所帮助。