You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:16:13