如何用Python在Windows系统中将多张图片存入剪贴板?
实现Windows下多张图片存入剪贴板的Python方案
方案1:本地图片文件直接存入剪贴板
这种方式和手动选中文件按Ctrl+C效果一致,聊天软件(如Messenger)能直接识别粘贴。需要用到pywin32库调用Windows剪贴板API。
步骤1:安装依赖
pip install pywin32
步骤2:代码实现
import win32clipboard import win32con def copy_images_to_clipboard(file_paths): # 打开剪贴板 win32clipboard.OpenClipboard() try: # 清空剪贴板 win32clipboard.EmptyClipboard() # 设置CF_HDROP格式,传递文件路径列表 win32clipboard.SetClipboardData(win32con.CF_HDROP, file_paths) finally: # 关闭剪贴板 win32clipboard.CloseClipboard() # 使用示例:传入本地图片路径列表 image_paths = [ r"C:\Users\XXX\Pictures\pic1.jpg", r"C:\Users\XXX\Pictures\pic2.png" ] copy_images_to_clipboard(image_paths)
方案2:内存中的多张图片存入剪贴板
如果你的图片是在内存中(比如用BytesIO加载的),需要将每张图片转换为Windows设备无关位图(DIB)格式,再通过IDataObject将多个图片数据存入剪贴板。
步骤1:安装额外依赖
pip install pywin32 pillow
步骤2:代码实现
import win32clipboard import win32com.client from PIL import Image import io def copy_memory_images_to_clipboard(images): # 创建IDataObject对象用于存储多份图片数据 data_obj = win32com.client.Dispatch("new:{CBC8A185-8F58-442E-B5CD-6EBA35D006B0}") fmt_enhmetafile = win32clipboard.RegisterClipboardFormat("EnhancedMetafile") for img in images: # 将PIL图片转为内存中的DIB格式 with io.BytesIO() as buffer: img.save(buffer, format="BMP") buffer.seek(0) dib_data = buffer.read() # 为每张图片设置剪贴板格式条目,兼容不同软件 data_obj.SetData(fmt_enhmetafile, dib_data) data_obj.SetData(win32con.CF_DIB, dib_data) # 写入剪贴板 win32clipboard.OpenClipboard() try: win32clipboard.EmptyClipboard() win32clipboard.SetClipboardData(win32con.CF_ENHMETAFILE, data_obj) finally: win32clipboard.CloseClipboard() # 使用示例:从内存加载图片(模拟BytesIO场景) def load_image_from_memory(img_bytes): return Image.open(io.BytesIO(img_bytes)) # 假设这里有两个内存中的图片对象 img1 = load_image_from_memory(open(r"C:\Users\XXX\Pictures\pic1.jpg", "rb").read()) img2 = load_image_from_memory(open(r"C:\Users\XXX\Pictures\pic2.png", "rb").read()) copy_memory_images_to_clipboard([img1, img2])
说明
- 方案1适合直接处理本地图片文件,代码简单兼容性强,绝大多数聊天软件都能识别。
- 方案2针对内存中的图片,通过
Pillow做格式转换,部分软件可能需要调整剪贴板格式适配。
内容的提问来源于stack exchange,提问作者Trường Oggy
相关产品推荐
相关产品推荐

