如何在没有PIL的情况下从剪贴板保存图像到文件?

时间:2016-03-06 15:31:30

标签: python image winapi clipboard

我的剪贴板上有截图。

我使用win32clipboard.GetClipboardData(win32con.CF_DIB)获取字符串,并将字符串写入.bmp文件,但图片查看器无法打开它。

那么,如果没有PIL(以及其他图像的第三部分库),如何将剪贴板中的图像写入本地?

1 个答案:

答案 0 :(得分:1)

简单方法的主要问题是写入文件的字符串缺少.bmp文件头,这是BITMAPFILEHEADER结构。

为了创建文件头,必须至少解码GetClipboardData()调用返回的字符串中的一些信息。对于CF_DIB剪贴板格式,字符串中数据的第一部分将为BITMAPINFOHEADER

这种头结构是非常通用的,因为有许多不同风格的DIB具有各种比特的每个组件和压缩种类。幸运的是,用于屏幕截图的屏幕非常简单 - 未压缩的RGBA像素。

这个事实使得事情变得更容易,因为否则确定要放在bfOffBits的{​​{1}}字段中的值会因为在大多数其他情况下也变化而变得复杂BITMAPFILEHEADER之后的大小颜色表和像素阵列的开始。

以下是处理该案例的示例代码(仅限):

BITMAPINFOHEADER