クリップボードから画像生成してデスクトップに保存

Python

クリップボードから画像生成してデスクトップに保存するpythonプログラムです。
便利ですのでよかったらどうぞ。

import os
import subprocess
from PIL import ImageGrab
from io import BytesIO
import win32clipboard

# クリップボードから画像を取得します。
def get_clipboard_image():
    win32clipboard.OpenClipboard()
    data = None
    if win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_DIB):
        data = win32clipboard.GetClipboardData(win32clipboard.CF_DIB)
    win32clipboard.CloseClipboard()
    
    if data is not None:
        image = ImageGrab.Image.open(BytesIO(data))
        return image
    else:
        print("クリップボードに画像データがありません。")
        return None

# デスクトップのパスを取得します。
desktop_path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')

# PNGファイルとして保存します。
def save_as_png(image, filename):
    file_path = os.path.join(desktop_path, filename)

    # ファイル名が衝突しないようにします。
    counter = 1
    while os.path.isfile(file_path):
        counter += 1
        file_path = os.path.join(desktop_path, f"{filename.split('.')[0]}_{counter}.png")

    image.save(file_path, 'PNG')
    return file_path

# エクスプローラーでファイルを選択します。
def select_file_in_explorer(file_path):
    # 正規化された絶対パスを取得します。
    normalized_path = os.path.normpath(file_path)
    subprocess.run(['explorer', '/select,', normalized_path])

# メイン関数
if __name__ == "__main__":
    image = get_clipboard_image()
    if image:
        # 保存したいファイル名を決定します。
        file_name = 'clipboard_image.png'
        saved_path = save_as_png(image, file_name)
        if saved_path:
            print(f"画像ファイルを保存しました: {saved_path}")
            select_file_in_explorer(saved_path)

コメント

タイトルとURLをコピーしました