PIL 模块保存功能仅适用于 Win10 return 黑图

PIL module save function on Win10 only return black image

我在 Windows 10 上通过 PIL.Image.save 功能保存屏幕截图时遇到问题。 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()

这里的问题是你在处理两个函数。
所以你的函数创建了局部变量。
因此你的 "screen" 在保存函数中是空的 -> 将是黑色的。

供参考:Python Global, Local and Nonlocal variables

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

这会起作用:) 也可以创建全局变量或者直接在上面保存。