PIL cannot identify image file for io.BytesIO object PIL cannot identify image file for io.BytesIO object python python

PIL cannot identify image file for io.BytesIO object


(This solution is from the author himself. I have just moved it here.)

SOLUTION:

# This portion is part of my test codebyteImgIO = io.BytesIO()byteImg = Image.open("some/location/to/a/file/in/my/directories.png")byteImg.save(byteImgIO, "PNG")byteImgIO.seek(0)byteImg = byteImgIO.read()# Non test codedataBytesIO = io.BytesIO(byteImg)Image.open(dataBytesIO)

The problem was with the way that Image.tobytes()was returning the byte object. It appeared to be invalid data and the 'encoding' couldn't be anything other than raw which still appeared to output wrong data since almost every byte appeared in the format \xff\. However, saving the bytes via BytesIO and using the .read() function to read the entire image gave the correct bytes that when needed later could actually be used.


While reading Dicom files the problem might be caused due to Dicom compression. Make sure both gdcm and pydicom are installed.

GDCM is usually the one that's more difficult to install. The latest way to easily install the same is

conda install -U conda-forge gdcm


image = Image.open(io.BytesIO(decoded))# File "C:\Users\14088\anaconda3\envs\tensorflow\lib\site-packages\PIL\Image.py", line 2968, in open# "cannot identify image file %r" % (filename if filename else fp)# PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x000002B733BB11C8>

===I fixed as worked:message = request.get_json(force=True)

encoded = message['image']# https://stackoverflow.com/questions/26070547/decoding-base64-from-post-to-use-in-pil#image_data = re.sub('^data:image/.+;base64,', '', message['image'])image_data = re.sub('^data:image/.+;base64,', '', encoded)# Remove extra "data:image/...'base64" is Very important# If "data:image/...'base64" is not remove, the following line generate an error message: # File "C:\Work\SVU\950_SVU_DL_TF\sec07_TF_Flask06_09\32_KerasFlask06_VisualD3\32_predict_app.py", line 69, in predict# image = Image.open(io.BytesIO(decoded))# File "C:\Users\14088\anaconda3\envs\tensorflow\lib\site-packages\PIL\Image.py", line 2968, in open# "cannot identify image file %r" % (filename if filename else fp)# PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x000002B733BB11C8># image = Image.open(BytesIO(base64.b64decode(image_data)))decoded = base64.b64decode(image_data)image = Image.open(io.BytesIO(decoded))# return json.dumps({'result': 'success'}), 200, {'ContentType': 'application/json'}#print('@app.route => image:')#print()processed_image = preprocess_image(image, target_size=(224, 224))prediction = model.predict(processed_image).tolist()#print('prediction:', prediction)response = {    'prediction': {        'dog': prediction[0][0],        'cat': prediction[0][1]    }}print('response:', response)return jsonify(response)