GIMPでクリップボードにコピーした画像をWordに貼れるようにする

GIMPクリップボードにコピーした画像は、Wordに貼り付けできない。

ペイントやExcelには貼り付けできるので、今まではいったんそっちに貼り付けて、それを再度コピーしてWordに貼り付けるなどしていた。

メンド過ぎ。アホか。

なので、ちょっとしたツールを作ってみた。

クリップボードを監視して、GIMPでコピーした画像を見つけたら、自動的にWordに貼れるような形式に変換してコピーし直すツール。

動作には.NET Framework 2.0が必要。

使い方

gimpclip.exeを実行すると、コマンドプロンプトの画面が開いてクリップボードの監視が始まる。この画面はそのまま放置しておく。

あとはGIMPで適当な画像をクリップボードにコピーして、Wordに普通に貼り付ければ良い。通常なら貼り付けできないけど、gimpclip.exeを起動している間は、貼り付けできるようになる。

gimpclipを終了したければ、コマンドプロンプトの画面で Ctrl + C を押す。

仕組み

ソースコードは以下。

import System;
import System.Drawing;
import System.Windows.Forms;
import System.Threading;

Console.Out.WriteLine('終了は Ctrl + C です。');
Console.Out.WriteLine('クリップボードの監視を開始しました。');
var format = 'image/bmp';
while(true){
  Thread.Sleep(1000);
  if(!Clipboard.ContainsData(format)) continue;
  if(Clipboard.GetImage() != null) continue;
  var img = Image.FromStream(Clipboard.GetData(format));
  Clipboard.SetImage(img);
  Console.Out.WriteLine('変換しました : ' + img.Width.ToString() + ' x ' + img.Height.ToString());
}

これだけ。JavaScript(JScript.NET)で書いた。コンパイル方法は以下。

%windir%\Microsoft.NET\Framework\v2.0.50727\jsc gimpclip.js

1秒おきにクリップボードの中身を調べて、"image/bmp" 形式のデータが入っているけど Image として取得できるデータが無い場合に、データを Image に変換して、クリップボードにセットしている。

変換に成功するとコマンドプロンプトの画面の方に一応ログが出るようになってる。

JScript.NETコンパイルが必要

JScript.NETは、JavaScriptで.NETのコードが書けるので非常に面白い。だけどせっかくのスクリプト言語なのに、コンパイルしてexeを作ってそれを実行するってのが残念だなあ。普通のjsみたくソースコードのまま実行できたらいいのに。

別なツールを導入すればそれもできるっぽいけど、OSが標準で持っていて欲しかった。そしたらJScript.NETももっと広まると思うんだけどね。