Javascriptからペイント(mspaint.exe)を制御し、PrintScreenで取得した画像をトリミング後保存する方法

Javascriptを使用するとペイントやVBAを制御することが可能だということはわかったのですが、以下のことはできるでしょうか?
1.PrintScreenで取得した画像をmspaint.exeに貼り付けて、トリミング後に保存(トリミングがしたいです)
色々とWebを検索してみたのですが、PrintScreenした画像を保存するということ以外は見当たらなかったので、可能かどうか(可能であればどうすれば良いのか)が知りたいです。

※一番参考になっているサイトは以下URLです。
http://d.hatena.ne.jp/language_and_engineering/20081121/1227203100

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2014/12/24 08:40:05

回答1件)

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ペイントを制御する方法ではないのですが、画像ファイルのトリミングを Windows 標準の範囲でやるなら WIA というのがあるみたいです。
XP 以降なら使えるようです。

http://msdn.microsoft.com/en-gb/library/windows/desktop/ms630819%28v=vs.85%29.aspx#itemCrop

Dim Img 'As ImageFile
Dim IP 'As ImageProcess

Set Img = CreateObject("WIA.ImageFile")
Set IP = CreateObject("WIA.ImageProcess")

Img.LoadFile "C:\WINDOWS\Web\Wallpaper\Bliss.bmp"

IP.Filters.Add IP.FilterInfos("Crop").FilterID
IP.Filters(1).Properties("Left") = Img.Width \ 4
IP.Filters(1).Properties("Top") = Img.Height \ 4
IP.Filters(1).Properties("Right") = Img.Width \ 4
IP.Filters(1).Properties("Bottom") = Img.Height \ 4

Set Img = IP.Apply(Img)

Img.SaveFile "C:\WINDOWS\Web\Wallpaper\BlissCrop.bmp"

ちょっと試した感じでは、ImageFile#SaveFile は上書き保存ができないようなので、ファイルを置き換えたいなら削除してから SaveFile をするような感じにしてあげる必要があります。

id:keijun5145

ImageMagickをこれからインストールするので、その対応を教えて下さい。

  • id:TransFreeBSD
    他のソフトをインストールして使うというのは無理ですか?
  • id:keijun5145
    業務で使用しているパソコンなので避けなくてはいけません。
    他のソフトであれば可能なのでしょうか?
  • id:standard_one
    ブラウザに表示されているものをキャプチャしたいだけなら簡単なんですけどねぇ
  • id:TransFreeBSD
    PrintScreenキーを押したことにするまでは質問のリンクの通りです。
    その後はたとえばimageMagickでかなりのことが出来ます。
    http://sharp-bang.jp/prog/im.html
    「Windows環境においては,clipboard:を指定することによりクリップボードから画像を読みこんだり」
    http://programmer-jobs.blogspot.jp/2009/05/imagemagickcrop.html
    「画像の特定の部位を切り出すことが可能です」
    その他、決め打ちなら様々な処理が可能です。
    (マウスで位置指定等著性があるならば別です)
  • id:Lhankor_Mhy
    ペイントが立ち上がるまではできているのだから、あとはそのトリミングをSendKeysで操作すればいいような気がするのですが、それでは上手くいかないのですか?
  • id:keijun5145
    本日はペイントに貼り付けるまではできたのですが、範囲選択ができないまま終わってしまいました。
    トリミングしたい領域は決まっているのですが、sendkeysでマウスの操作をする部分ができなかったので、保留になってしまいました。
    トリミングを行うには指定した範囲の始点から終点までを左クリックした状態で選択しないといけません。
    指定した範囲を選択したい場合はsendkyesで範囲選択の状態にした後、{BTNDOWN LEFT,X,Y}を行い、{BTNUP LEFT,X,Y}でクリック状態(左ボタンが押されている状態)を解除するのではないのでしょうか?
    なんどやっても実行時エラーで止まってしまうので諦めてしまいました。
    明日は全て手動でやりますが、明後日からは完成したプログラムを使って一度に出したいと思っています。
    コードが会社のPCの内部にあるのでなにもできませんが、明日改めて質問させていただきます。
  • id:a-kuma3
    質問の本題とは違いますが、スクリーンショットを画像としてファイルに保存するところは、ちょっと不細工だなあ、と思います。
    特に mspaint.exe を閉じるときの ALT+F4 は、Sleep の時間をこらえきれずにウィンドウを変えると、思わぬものが閉じてしまうという事故につながります。
    # 試している間に、実際にはまりました X-|

    いろいろと制約があるのでしょうが、他のソフトを導入することで、より確実に自動化できます。

    TransFreeBSD さんが挙げている ImageMagic は COM として VBScript から制御できますし、クリップボードからの取り込みもできたはずです。
    他には、こんなのも見つけました。
    http://www.nirsoft.net/utils/nircmd.html
  • id:keijun5145
    度々質問をしてしまい申し訳ありません。
    本日、要件が変わり、Excelで計算して出力した表とグラフが1枚のシートにある画像を取得すれば良いということになりました。
    まとめとしては以下の手順になりました。
    ・指定したCSVファイルを開く(ExcelでOK)
    ・指定したExcelファイルを開く
    ・CSVの指定範囲のセルをコピー
    ・Excelのシート2の指定範囲のセルに値のみ貼付け
    ・Excelのシート1をアクティブに変更しスクショを取得
    ・当該スクショの座標を指定してトリミング後(指定名(できれば固定で))保存
    こんな流れなんですが、できますか?
  • id:a-kuma3
    http://lightbox.matrix.jp/ginpro/patio.cgi?mode=view&no=288
    VBScript で ImageMagick の OLE を使って、画像の切り抜きをしているソースがあります。

    convert コマンドのパラメータを、Convert メソッドは そのまま 受け取るようです。
    http://imagemagick.org/script/ImageMagickObject.php
  • id:keijun5145
    バッチファイルを使ってpngファイルのトリミングを行うものを参考にしたのですが、
    ローカルドライブでは問題なく動作しました。
    ただ、ネットワークドライブ上ではトリミングがされない状態で保存されるのですが、何が問題なのでしょうか?
    実行結果としてはローカルで問題なく動くのですが、ネットワーク越しだとカレントフォルダにpng.bmpというファイル(1つ上の階層に保存してあるファイルをbmpに変換しただけのファイル)が保存されるだけでトリミングが実行されません。

    実行タイミングが関係あるかと思いtimeout 3等を入れてみましたが、変化はありませんでした。
    バッチ処理を行っている画面も1処理ずつ見ていますが、エラーは出ていません。

    何が原因でしょう??

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません