Python中如何将抓取的图像保存到userinput目录

2024-06-28 20:21:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我曾在以下代码中工作过:

def getnsave(event):
    widget=event.widget
    x=root.winfo_rootx()+widget.winfo_x()
    y=root.winfo_rooty()+widget.winfo_y()
    x1=x+widget.winfo_width()
    y1=y+widget.winfo_height()
    formats=[('Obrázky (.png)','*.png'),('Obrázky (.jpg)','*.jpg')]
    img=ImageGrab.grab().crop((x,y,x1,y1))
    f=filedialog.asksaveasfile(filetypes=(("Portable Network Graphics (*.png)", "*.png"),("All Files (*.*)", "*.*")),mode='w',defaultextension='.png')
    if f is None:
        return
    f.write(img)
    f.close()

我得到了一个错误:

^{pr2}$

请帮帮我。我知道,在我选择目录之后,我需要命令保存什么。你知道怎么做吗?在


Tags: 代码eventimgpngdefrootwidgetjpg
2条回答

要将PIL图像保存到文件中,必须使用^{}方法。要使其正确工作,有两件事很重要:

  1. 文件必须以二进制模式打开。在

    这意味着您必须在中更改w文件模式

    filedialog.asksaveasfile(filetypes=(("Portable Network Graphics (*.png)", "*.png"),
                                        ("All Files (*.*)", "*.*")),
                             mode='w',
                             defaultextension='.png')
    

    像这样wb

    filedialog.asksaveasfile(filetypes=(("Portable Network Graphics (*.png)", "*.png"),
                                        ("All Files (*.*)", "*.*")),
                             mode='wb',
                             defaultextension='.png')
    
  2. PIL需要知道您希望以哪种格式保存图像。可以从文件扩展名中提取格式,如下所示:

    filename = f.name
    extension = filename.rsplit('.', 1)[-1]
    

把这些放在一起:

f = filedialog.asksaveasfile(filetypes=(("Portable Network Graphics (*.png)", "*.png"),
                                        ("All Files (*.*)", "*.*")),
                             mode='wb',
                             defaultextension='.png')
if f is None:
    return

filename = f.name
extension = filename.rsplit('.', 1)[-1]

img.save(f, extension)
f.close()

我猜您使用的是来自PILImageGrab模块,即使您没有在代码片段中显示import命令。如果PIL处于活动状态,则可以使用以下方式编写图像:

img.save(filename,'PNG')

注意,filedialog.asksaveasfile返回文件名,而不是file对象。所以可以直接在前面的命令中使用它

相关问题 更多 >