Функция сохранения модуля PIL на Win10 возвращает только черное изображение - PullRequest
0 голосов
/ 20 октября 2018

У меня проблема с сохранением снимка экрана с помощью функции PIL.Image.save в Windows 10. Функция PIL.Image.show () работает нормально и отображает снимок экрана, как и ожидалось, но функция сохранения сохраняет изображение как полностью черное изображение.Можно ли как-то нормально сохранить картинку с внутренними функциями PIL?

from PIL import ImageGrab
import os
from PIL import Image

path='C:\ProgramData\'

player_id='1'
player_name='player'
_format='PNG'

pic_name = player_id + '.' + _format
screen = Image.Image
screen = Image.new("RGB", (1280, 720), 0)
def make_screen_shot():
    try:
        screen = ImageGrab.grab()
        screen.show()          
    except IOError:
        return False
    else:
        return True

def save_pic():
    pic_name = player_id + '.' + _format
    try:

        screen.save(os.path.join(path, pic_name), _format)
    except IOError:
        return False
    else:
        return True
make_screen_shot()
save_pic()

1 Ответ

0 голосов
/ 20 октября 2018

Проблема здесь в том, что вы имеете дело с двумя функциями.
То есть ваши функции создают локальные переменные.
Поэтому ваш "экран" пуст в функции сохранения -> будет черным.

Для справки: Глобальные, локальные и нелокальные переменные Python

from PIL import ImageGrab
import os
from PIL import Image

path='C:/ProgramData/'

player_id='1'
player_name='player'
_format='PNG'

pic_name = player_id + '.' + _format
screen = Image.Image
screen = Image.new("RGB", (1280, 720), 0)
def make_screen_shot():
    try:
        screen = ImageGrab.grab()
        screen.show()
        save_pic(screen)         
    except IOError:
        return False
    else:
        return True

def save_pic(image):
    screen = image
    pic_name = player_id + '.' + _format
    try:

        screen.save("test.png") #here you can use your save function just renamed for testing
    except IOError:
        return False
    else:
        return True
make_screen_shot()

Это будет работать :) Также вы можете создать глобальную переменную или сохранить ее непосредственно выше.

...