为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

富国沪深 2021-10-19 16:39:36
我正在尝试使用该tkinter解决方案获取从 GIMP 复制的剪贴板图像数据,但无法使其工作,将数据保存到文件:from tkinter import Tkr = 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 文件。我用 获得了调用的type参数,它返回:clipboard_get()r.selection_get(selection='CLIPBOARD', type='TARGETS')'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,但它们会导致类似的错误。我究竟做错了什么?
查看完整描述

2 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

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


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 的最佳方法。


查看完整回答
反对 回复 2021-10-19
  • 2 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号