クリップボード内にある画像をファイル保存せず、大きさ調整するプログラムを書いた。ブログやSNS投稿用に作ったんだが、我ながら便利だ。
Windows専用で人によっては残念。
使い方
下記のソース2つを手元に用意して、画像をコピーしたら、バッチファイルを実行。これで横幅が640に変更され、その結果がクリップボードに入る。640以外のサイズにしたい人は、バッチファイルソース内の値を編集する。自分も何サイズか用意している。
python3のインストールと、Pillow および pywin32 モジュールのインストールが必要。pythonのパスはいい感じに通しておく。
ソースコード
ここにもソースを張るが、最新は githubで。(ただしgithub側のバッチファイルはpythonの場所が自分の環境用にvenvを有効にする感じになってる。)
https://github.com/logicalmodelin/LGMLtools/tree/main/blog20221215_resize_clipboard_image
import sys
from PIL import ImageGrab
import io
if __name__ == '__main__':
try:
import win32clipboard
except ImportError:
print('win32clipboard モジュールが必要です。'
' >pip install pywin32 | python -m pip install pywin32', file=sys.stderr)
sys.exit(1)
if len(sys.argv) < 2:
print('画像の横幅を第一引数に指定してください。', file=sys.stderr)
sys.exit(1)
img = ImageGrab.grabclipboard()
if not img:
print('クリップボードに画面がありません。', file=sys.stderr)
sys.exit(1)
width = int(sys.argv[1])
# if img.size[0] < width:
# print('画像の横幅が指定より小さいです。', file=sys.stderr)
# sys.exit(1)
ratio = float(img.size[0] / img.size[1])
size = (width, int(width / ratio))
img = img.resize(size)
# img.show()
output = io.BytesIO()
img = img.convert('RGB')
img.save(output, 'BMP')
data = output.getvalue()[14:]
output.close()
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
win32clipboard.CloseClipboard()
print(f'クリップボードに画面({size[0]}x{size[1]})を保存しました。')python resize_clipboard_image.py 640技術メモ
クリップボードの画像取得は ImageGrab で可能だが、ペーストはごねごねしないとだめで、Windowsでは、BMPフォーマットのヘッダなしみたいなのを入力しないといけないみたいだ。以下2サイトを参考とした。
https://jangle.tokyo/2020/07/07/post-2241/
https://code.tiblab.net/python/pil/clipboard_send_image
Macはどうやんの?







