我在Windows剪贴板中有一个图像(jpg,png等).我想将它保存到文件中.win32clipboard似乎是答案,但我能找到的每个例子都与文本有关.
然后将图像复制到剪贴板
import win32clipboard
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
with open(name, 'wb') as f:
f.write(data)
win32clipboard.CloseClipboard()
Run Code Online (Sandbox Code Playgroud)
失败了
TypeError: Specified clipboard format is not available
Run Code Online (Sandbox Code Playgroud)
我还想反过来 - 给定一个图像文件,将其写入剪贴板.
Ger*_*rat 22
我会用枕头:
from PIL import ImageGrab
im = ImageGrab.grabclipboard()
im.save('somefile.png','PNG')
Run Code Online (Sandbox Code Playgroud)
您需要传递一个参数来GetClipboardData指定您要查找的数据的格式.您可以使用EnumClipboardFormats以查看可用的格式 - 当我在资源管理器中复制某些内容时,我可以使用15种格式.
编辑2:这是在资源管理器中复制文件后获取文件名的代码.如果您从程序,浏览器中复制图像,答案将完全不同.
import win32clipboard
win32clipboard.OpenClipboard()
filename_format = win32clipboard.RegisterClipboardFormat('FileName')
if win32clipboard.IsClipboardFormatAvailable(filename_format):
input_filename = win32clipboard.GetClipboardData(filename_format)
win32clipboard.CloseClipboard()
Run Code Online (Sandbox Code Playgroud)
编辑3:从评论中可以清楚地看到剪贴板中有实际图像,而不是图像文件的文件名.您已声明不能使用PIL,因此:
import win32clipboard
win32clipboard.OpenClipboard()
if win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_DIB):
data = win32clipboard.GetClipboardData(win32clipboard.CF_DIB)
win32clipboard.CloseClipboard()
Run Code Online (Sandbox Code Playgroud)
此时,您有一个包含图像数据的字符串(在Python 2中)或字节(在Python 3中).您能够保存的唯一格式是.BMP,您必须解码BITMAPINFOHEADER以获取需要写入文件前面的BITMAPFILEHEADER的参数.
使用PythonMagick(二进制文件):
from PythonMagick import Image
Image("clipboard:").write("PNG32:clipboard.png") # clipboard -> file
Image("clipboard.png").write("clipboard:") # file -> clipboard
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9669 次 |
| 最近记录: |