Copy image to clipboard?
I did copy the code and replace the StringIO with BytesIO and it worked! (with *.jpg and *.png files) Thank you so much!
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)
For those who want to copy-paste
# 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()
You don't want StringIO
here. Images are raw binary data, and in Py3, str
is purely for text; bytes
and bytes
-like objects (bytearray
, contiguous memoryview
s, mmap
s) are for binary data. To replace Py2's StringIO.StringIO
for binary data, you want to use io.BytesIO
in Python 3, not io.StringIO
.