Как сохранить изображение с помощью PIL?

Я только что сделал некоторую обработку изображений, используя библиотеку изображений Python (PIL), используя сообщение, которое я нашел ранее, для выполнения преобразований Фурье изображений, и я не могу заставить функцию сохранения работать. Весь код работает отлично, но он просто не сохранит результирующее изображение:

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") 

Ошибка, которую я получаю, следующая:

 save_handler = SAVE[string.upper(format)] # unknown format KeyError: '.BMP' 

Как сохранить изображение с Pythons PIL?

  • Есть ли простой способ сделать и сохранить анимацию с Pygame?
  • Как сохранить пользовательские настройки IDLE python?
  • как сделать функции сохранения / загрузки в pygame?
  • MatPlotLib plot_surface: скрытые строки, появляющиеся в PDF-файле
  • Сохранение объекта (сохранение данных)
  • После выполнения команды Python Paramiko, как я могу сохранить результат?
  • Как сохранить словарь в поле модели базы данных Django
  • Matplotlib.pyplot: сохранить графики в pdf
  • 4 Solutions collect form web for “Как сохранить изображение с помощью PIL?”

    Ошибка в отношении расширения файла была обработана, вы либо используете bmp (без точки), либо передаете имя вывода с расширением уже. Теперь, чтобы обработать ошибку, вам необходимо правильно изменить свои данные в частотной области для сохранения в виде целочисленного изображения, PIL сообщает вам, что он не принимает данные float для сохранения в виде bmp.

    Вот предложение (с другими незначительными изменениями, например, с использованием fftshift и numpy.array вместо numpy.asarray ) для выполнения преобразования для правильной визуализации:

     import sys import numpy from PIL import Image img = Image.open(sys.argv[1]).convert('L') im = numpy.array(img) fft_mag = numpy.abs(numpy.fft.fftshift(numpy.fft.fft2(im))) visual = numpy.log(fft_mag) visual = (visual - visual.min()) / (visual.max() - visual.min()) result = Image.fromarray((visual * 255).astype(numpy.uint8)) result.save('out.bmp') 

    Вы должны просто позволить PIL получить тип файла из расширения, то есть использовать:

     j.save("C:/Users/User/Desktop/mesh_trans.bmp") 

    Попробуйте удалить . перед .bmp (это не соответствует BMP как ожидалось). Как вы можете видеть из этой ошибки, save_handler является верхним save_handler format вы предоставили, и затем ищет совпадение в SAVE . Однако соответствующий ключ в этом объекте – BMP (вместо .BMP ).

    Я не очень много знаю о PIL , но из-за быстрого поиска вокруг кажется, что это проблема с mode изображения. Изменив определение j на:

     j = Image.fromarray(b, mode='RGB') 

    Казалось, что я работаю для меня (однако заметьте, что я мало знаю PIL , поэтому я бы предложил использовать решение @ mmgp, поскольку он / она ясно знает, что они делают :)). Для типов mode я использовал эту страницу – надеюсь, один из вариантов там будет работать для вас.

    Я знаю, что это старый, но я обнаружил, что открытие файла с помощью open(fp, 'w') а затем сохранение файла будет работать. Например:

     j.save(open(fp, 'w')) 

    fp – путь к файлу, конечно. (Это с подушкой)

    Python - лучший язык программирования в мире.