I have just done some image processing using the Python image library (PIL) using a post I found earlier to perform fourier transforms of images and I can't get the save function to work. The whole code works fine but it just wont save the resulting image:
from PIL import Image
import numpy as np
i = Image.open("C:/Users/User/Desktop/mesh.bmp")
i = i.convert("L")
a = np.asarray(i)
b = np.abs(np.fft.rfft2(a))
j = Image.fromarray(b)
j.save("C:/Users/User/Desktop/mesh_trans",".bmp")
The error I get is the following:
save_handler = SAVE[string.upper(format)] # unknown format
KeyError: '.BMP'
How can I save an image with Pythons PIL?
This question is related to
python
save
python-imaging-library
I know that this is old, but I've found that (while using Pillow) opening the file by using open(fp, 'w')
and then saving the file will work. E.g:
with open(fp, 'w') as f:
result.save(f)
fp
being the file path, of course.
You should be able to simply let PIL get the filetype from extension, i.e. use:
j.save("C:/Users/User/Desktop/mesh_trans.bmp")
Try removing the .
before the .bmp
(it isn't matching BMP
as expected). As you can see from the error, the save_handler
is upper-casing the format
you provided and then looking for a match in SAVE
. However the corresponding key in that object is BMP
(instead of .BMP
).
I don't know a great deal about PIL
, but from some quick searching around it seems that it is a problem with the mode
of the image. Changing the definition of j
to:
j = Image.fromarray(b, mode='RGB')
Seemed to work for me (however note that I have very little knowledge of PIL
, so I would suggest using @mmgp's solution as s/he clearly knows what they are doing :) ). For the types of mode
, I used this page - hopefully one of the choices there will work for you.
Source: Stackoverflow.com