PIL cannot identify image file for io.BytesIO object

后端 未结 3 596
情话喂你
情话喂你 2020-11-27 06:38

I am using the Pillow fork of PIL and keep receiving the error

OSError: cannot identify image file <_io.BytesIO object at 0x103a47468>

3条回答
  •  隐瞒了意图╮
    2020-11-27 07:40

    On some cases the same error happens when you are dealing with a Raw Image file such CR2. Example: http://www.rawsamples.ch/raws/canon/g10/RAW_CANON_G10.CR2

    when you try to run:

    byteImg = Image.open("RAW_CANON_G10.CR2")
    

    You will get this error:

    OSError: cannot identify image file 'RAW_CANON_G10.CR2'
    

    So you need to convert the image using rawkit first, here is an example how to do it:

    from io import BytesIO
    from PIL import Image, ImageFile
    import numpy
    from rawkit import raw
    def convert_cr2_to_jpg(raw_image):
        raw_image_process = raw.Raw(raw_image)
        buffered_image = numpy.array(raw_image_process.to_buffer())
        if raw_image_process.metadata.orientation == 0:
            jpg_image_height = raw_image_process.metadata.height
            jpg_image_width = raw_image_process.metadata.width
        else:
            jpg_image_height = raw_image_process.metadata.width
            jpg_image_width = raw_image_process.metadata.height
        jpg_image = Image.frombytes('RGB', (jpg_image_width, jpg_image_height), buffered_image)
        return jpg_image
    
    byteImg = convert_cr2_to_jpg("RAW_CANON_G10.CR2")
    

    Code credit if for mateusz-michalik on GitHub (https://github.com/mateusz-michalik/cr2-to-jpg/blob/master/cr2-to-jpg.py)

提交回复
热议问题