将图像复制到剪贴板?

新手上路,请多包涵

首先,关于 SO copy image to clipboard in python 的问题导致回答 Write image to Windows clipboard in python with PIL and win32clipboard? ,这只适用于 Python 2.x。 – 我试过了,没用。我克服了一个问题: StringIO 和 cStringIO 模块在 Python 3.0: 中消失了,但遇到了另一个问题:

 TypeError: string argument expected, got 'bytes'

因此,再次针对 Python 3 再次提出相同的问题——How to copy image to clipboard in Python 3?这是我到目前为止的代码:

 from io import StringIO
import win32clipboard
from PIL import Image

def send_to_clipboard(clip_type, data):
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardData(clip_type, data)
    win32clipboard.CloseClipboard()

filepath = 'image.jpg'
image = Image.open(filepath)

output = StringIO()
image.convert("RGB").save(output, "BMP")
data = output.getvalue()[14:]
output.close()

send_to_clipboard(win32clipboard.CF_DIB, data)

谢谢

原文由 xpt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

我确实复制了代码并将 StringIO 替换为 BytesIO 并且它起作用了! (带有 *.jpg 和 *.png 文件)非常感谢!

 from io import BytesIO
import win32clipboard
from PIL import Image

def send_to_clipboard(clip_type, data):
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardData(clip_type, data)
    win32clipboard.CloseClipboard()

filepath = 'Ico2.png'
image = Image.open(filepath)

output = BytesIO()
image.convert("RGB").save(output, "BMP")
data = output.getvalue()[14:]
output.close()

send_to_clipboard(win32clipboard.CF_DIB, data)

原文由 Luis Villamil 发布,翻译遵循 CC BY-SA 4.0 许可协议

你不想要 StringIO 在这里。图像是原始二进制数据,在 Py3 中, str 是纯文本; bytes and bytes objects ( bytearray , contiguous memoryview s, mmap s) are for binary data .要将 Py2 的 StringIO.StringIO 替换为二进制数据,您需要在 Python 3 中使用 io.BytesIO 而不是 io.StringIO

原文由 ShadowRanger 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题