我有一些 Python 代码可以编辑图像文件,并且想知道如何
将图像数据添加到操作系统剪贴板并从那里获取它。
在寻找跨平台解决方案来替换或获取Python 中的剪贴板文本时,有很多简单的答案(例如,使用带有一些代码
的内置 Tkinter 模块)。
但是,这些方法只能使用纯文本,不能使用其他剪贴板数据,如图像。
我的 Python 版本是 Windows 上的 3.x,但答案需要是跨平台的
(在不同的操作系统上工作),并且还应该支持其他 Python 版本,如 2.x。
我认为它应该只使用内置的 Python 模块,并且代码不应该太复杂(或者解释它的作用)。它可以是 Python 模块,因为文件可以包含在与可移植程序代码相同的文件夹中以避免安装。
还有一些其他相关问题可能适用于图像,但它们仅支持单个操作系统。最好的是将图像复制到 Python3 中的剪贴板和使用 PIL和win32clipboard 在 python 中将图像写入 Windows 剪贴板?.
那里描述的方法(仅适用于 Windows)似乎使用以下步骤:
- 获取图像的原始二进制数据 - 该方法使用 Python Imaging
Library ( PIL/Pillow ) 模块加载图像文件,因为它具有稍后使用的其他处理功能,在一个简单
且流行的标准 API 中。这可以使用不同的模块来完成(例如Pygame)。 - 使用内置的io
模块创建一个文件对象变量(用于内存输入/输出流)。对于 Python 2.x,from cStringIO import StringIO
使用了 Python 3,但使用了
更好的io.BytesIO
二进制流对象类型——旧的现在只允许文本。 - 将图像数据以 BMP(Windows 位图/设备独立位图)文件格式保存
到上一步中的文件对象变量。使用 PIL/Pillow 的方法首先
将此数据转换.convert("RGB")
为包含它的变量。 - 获取文件对象变量内存缓冲区的全部内容为二进制数据(
bytes
object),
从位置14开始切片,去掉BMP/DIB文件格式的14字节头,然后保存
为变量。该方法表示,此数据的切片适用于 32 位或 64 位系统,但
需要 Windows 剪贴板 API,因此不适用于不同的文件格式。 - 关闭内存缓冲区并将上一步中的图像数据复制到剪贴板。
该方法使用win32clipboard
扩展模块的一部分在 Windows 上执行此操作 -
它打开剪贴板以供使用,清除它,将其值设置为
上一步中的图像数据变量(使用 BMP/DIB 类型),然后关闭打开的剪贴板。
此外,还有一个名为Pyperclip的简单跨平台剪贴板文本模块,它
只是 1.5.6 版本的单个文件,并且可能包含可以处理图像数据的代码。