pythonで画像ファイルをクリップボードへコピーする
画像ファイルをクリップボードへコピーする
まずこっちが基本です。
import win32clipboard
from PIL import Image
import io
def send_to_clipboard():
file_path = "genbaneko.png"
original_image = Image.open(file_path)
output = io.BytesIO()
original_image.convert("RGB").save(output, "BMP")
data = output.getvalue()[14:]
output.close()
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
win32clipboard.CloseClipboard()
def main():
send_to_clipboard()
if __name__ == "__main__":
main()
Windows付属のペイントを起動して、ctrl + v を押して貼り付けられることを確認して下さい。
ndarray型の画像データをクリップボードへコピペする
実際に画像編集をしているとpythonで編集中のndarray型の画像データをクリップボードへコピーしたくなります。その場合は、以下のようにします。
import numpy as np
import cv2
import win32clipboard
from PIL import Image
import io
def copy_img_to_clip_board(img_ndarray):
"""
ndarray型の画像を引数にとって、クリップボードにコピーする関数
"""
output = io.BytesIO()
# img_ndarray = cv2.cvtColor(img_ndarray, cv2.COLOR_BGR2RGB)
img_pil = Image.fromarray(np.uint8(img_ndarray)) # <class 'PIL.Image.Image'>に変換
img_pil.save(output, 'BMP')
img_bmp = output.getvalue()[14:]
output.close()
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, img_bmp)
win32clipboard.CloseClipboard()
def main():
# 面倒なので、画像を読み込んでndarray型にすることでndarray型の画像を用意しているが、
# 理想としては画像をコードで切り取ったり編集したあとのndarray型の画像です
file_path = "static/images/genbaneko.png"
original_image = Image.open(file_path)
print(type(original_image)) # <class 'PIL.JpegImagePlugin.JpegImageFile'>
original_image = original_image.convert("RGB")
print(type(original_image)) # <class 'PIL.Image.Image'>
original_image = np.array(original_image, dtype='int64')
print(type(original_image)) # <class 'numpy.ndarray'>
copy_img_to_clip_board(original_image)
if __name__ == "__main__":
main()
Windows付属のペイントを起動して、ctrl + v を押して貼り付けられることを確認して下さい。
