xpt*_*xpt 6 python windows clipboard python-3.x
首先,在python中将 SO 复制图像复制到剪贴板的问题导致回答使用PIL和win32clipboard在python中将图像写入Windows剪贴板?,这对Python 2.x只有好处. - 我试了一下它没用.我克服了一个问题:StringIO和cStringIO模块在Python 3.0中消失了:但是碰到了另一个:
TypeError: string argument expected, got 'bytes'
Run Code Online (Sandbox Code Playgroud)
因此,再次为Python 3重新提出同样的问题 - 如何在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)
Run Code Online (Sandbox Code Playgroud)
谢谢
你不想StringIO在这里.图像是原始二进制数据,并且在PY3,str纯粹是为了文本,bytes和bytes样对象(bytearray的,连续的memoryviewS,mmapS)是用于二进制数据.要替换StringIO.StringIO二进制数据的Py2 ,你想io.BytesIO在Python 3中使用,而不是io.StringIO.
小智 6
我确实复制了代码并将 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)
Run Code Online (Sandbox Code Playgroud)
对于那些想要复制粘贴的人
# parameter must be a PIL image
def send_to_clipboard(image):
output = BytesIO()
image.convert('RGB').save(output, 'BMP')
data = output.getvalue()[14:]
output.close()
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
win32clipboard.CloseClipboard()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2244 次 |
| 最近记录: |