невозможно сохранить изображение с помощью PIL - PullRequest
0 голосов
/ 29 марта 2019

Я могу сделать изображение и сохранить его в файл следующим образом:

Img1 = PIL.Image.new('RGB', (512,512))
display(newImg1)
Img1.save("img1.jpg","JPEG")

, но это изображение не сохранит

import numpy as np
import PIL.Image

def makePic(a, fmt='jpeg'):
    a = np.uint8(np.clip(a, 0, 255))
    f = StringIO()
    result=PIL.Image.fromarray(a).save(f, fmt)
    result=(Image(data=f.getvalue()))
    return result


Img2 = np.float32(PIL.Image.new('RGB', (512,512)))
imag=makePic(Img2)
display(imag)
imag.save("img1.jpg","JPG")

----> 4 imag.save("img1.jpg","JPG")

AttributeError: 'Image' object has no attribute 'save'

Дисплей (imag) показывает изображение нормально, но pythonдумает, что это не изображение.почему?

1 Ответ

0 голосов
/ 29 марта 2019

Эта тема дала мне подсказку: изображение не отображается в ipython

к сожалению, scipy.misc.imsave устарел, и я должен использовать imageio

Но тогда я не мог просто

pip install imageio

. Это дало мне некоторое недоумение по поводу использования sudo и флага -H.Ну, я сделал это, и действительно, когда я запустил Python, я мог сделать это

>>>import imageio
>>>

, но когда я запустил ноутбук-юпитер, ноутбук был глупым и сказал «нет модуля с именем imageio»

Тогда я попытался установить его снова и получил

$pip install imageio
Requirement already satisfied: imageio in /usr/local/lib/python3.6/dist-packages (2.5.0)
Requirement already satisfied: pillow in /usr/lib/python3/dist-packages (from imageio) (5.1.0)
Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (from imageio) (1.13.3)

Как все закончилось в директории python3?Поэтому я решил попробовать это

$python -m pip install imageio --user
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
Requirement already satisfied: imageio in ./.local/lib/python2.7/site-packages (2.5.0)
Requirement already satisfied: futures in /usr/local/lib/python2.7/dist-packages (from imageio) (3.2.0)
Requirement already satisfied: numpy in /usr/lib/python2.7/dist-packages (from imageio) (1.13.3)
Requirement already satisfied: enum34 in /usr/lib/python2.7/dist-packages (from imageio) (1.1.6)
Requirement already satisfied: pillow in /usr/local/lib/python2.7/dist-packages (from imageio) (5.4.1)

Почему я хочу продолжать использовать Python 2.7?Ну, потому что у меня есть эти довольно длинные программы на Python, которые я не чувствую, как устранение неполадок, чтобы заставить их работать в python3.Во всяком случае, теперь, когда я открываю jupyter-notebook, я могу сделать это

import numpy as np
import PIL.Image
import imageio
from IPython.display import clear_output, Image, display

img2 = np.float32(PIL.Image.new('RGB', (256,512)))
imageio.imwrite('test.jpg', img2[:, :, 0])

, и он сохраняет нужный jpg на диск.Но если я попытаюсь просмотреть это так

display(img2)

, очевидно, я просто получу массив numpy.Чтобы отобразить его, мне нужно преобразовать массив с makePic def следующим образом:

img2 = np.float32(PIL.Image.new('RGB', (125,512)))
imageio.imwrite('test.jpg', img2[:, :, 0])
#display(img2)
image=makePic(img2)
display(image)

Интересно, что вызов imageio.imwrite просто записывает массив numpy на диск, но когда я иду в файл и открываюочевидно, что в Ubuntu программа просмотра изображений выполняет преобразование массива в изображение.

...