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 を押して貼り付けられることを確認して下さい。

Python

Posted by パソコンの先生