繁体   English   中英

如何使用 tkinter 将剪贴板中的图像数据保存到 Debian 上的 Python 3 中的文件?

[英]How to save image data from clipboard to a file in Python 3 on Debian, using tkinter?

我正在尝试使用tkinter解决方案获取从 GIMP 复制的剪贴板图像数据,但无法使其工作,将数据保存到文件:

from tkinter import Tk
r = Tk()
r.withdraw()
clip = r.clipboard_get(type="image/png")
r.update()
r.destroy()
with open("testbytes.png", mode="bw+") as f:
    f.write(clip.encode())

当我尝试打开 testbytes.png 文件时,图像查看器报告一个致命错误,而不是一个 PNG 文件。 我使用r.selection_get(selection='CLIPBOARD', type='TARGETS')获得了clipboard_get()调用的type参数,它返回:

'TIMESTAMP TARGETS MULTIPLE SAVE_TARGETS image/png image/bmp image/x-bmp image/x-MS-bmp image/x-icon image/x-ico image/x-win-bitmap image/vnd.microsoft.icon application/ico image/ico image/icon text/ico image/tiff image/jpeg '

我认为剪贴板上的数据格式是PNG。 我也尝试过 JPEG、BMP 和 TIFF,但它们会导致类似的错误。

我究竟做错了什么?

使用转换方法中,在获得的单独的SO问题,对PNG数据的hexdump都tkinter从剪贴板提供,正确的代码是:

from tkinter import Tk
r = Tk()
r.withdraw()
clip = r.clipboard_get(type="image/png")
r.update()
r.destroy()
# Convert hexdump to bytes
clip = bytes([eval(h) for h in clip.strip().split(' ')])
with open("testbytes.png", mode="bw+") as f:
    f.write(clip)

除了写出一个 PNG 文件,数据也可以用pillow模块(以前称为PIL )加载:

import io
from PIL import Image
cf = io.BytesIO(clip)
cim = Image.open(cf)
cim.show()

据我所知,这是在 Linux (Debian) 上将 PNG 文件从剪贴板读取到 Python 3 的最佳方法。

为此创建了一个用于 windows 的工具 该代码也可用于 debian。 此脚本监视剪贴板中的更改,并弹出一个 tkinter 窗口,询问您用于保存图像的文件名(如果文件夹中不存在该文件名)。 然后将图像作为 PNG 文件保存到文件夹中。 它对用于剪切屏幕的 Windows 快捷方式 Windows + Shift + S 尤其有用。

请在这里找到它: https : //github.com/Mitzzzzz/Clipboard-Image-Saver

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM