Javascriptを使用するとペイントやVBAを制御することが可能だということはわかったのですが、以下のことはできるでしょうか?
1.PrintScreenで取得した画像をmspaint.exeに貼り付けて、トリミング後に保存(トリミングがしたいです)
色々とWebを検索してみたのですが、PrintScreenした画像を保存するということ以外は見当たらなかったので、可能かどうか(可能であればどうすれば良いのか)が知りたいです。
※一番参考になっているサイトは以下URLです。
http://d.hatena.ne.jp/language_and_engineering/20081121/1227203100
ペイントを制御する方法ではないのですが、画像ファイルのトリミングを 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 をするような感じにしてあげる必要があります。
コメント(10件)
他のソフトであれば可能なのでしょうか?
その後はたとえばimageMagickでかなりのことが出来ます。
http://sharp-bang.jp/prog/im.html
「Windows環境においては,clipboard:を指定することによりクリップボードから画像を読みこんだり」
http://programmer-jobs.blogspot.jp/2009/05/imagemagickcrop.html
「画像の特定の部位を切り出すことが可能です」
その他、決め打ちなら様々な処理が可能です。
(マウスで位置指定等著性があるならば別です)
トリミングしたい領域は決まっているのですが、sendkeysでマウスの操作をする部分ができなかったので、保留になってしまいました。
トリミングを行うには指定した範囲の始点から終点までを左クリックした状態で選択しないといけません。
指定した範囲を選択したい場合はsendkyesで範囲選択の状態にした後、{BTNDOWN LEFT,X,Y}を行い、{BTNUP LEFT,X,Y}でクリック状態(左ボタンが押されている状態)を解除するのではないのでしょうか?
なんどやっても実行時エラーで止まってしまうので諦めてしまいました。
明日は全て手動でやりますが、明後日からは完成したプログラムを使って一度に出したいと思っています。
コードが会社のPCの内部にあるのでなにもできませんが、明日改めて質問させていただきます。
特に mspaint.exe を閉じるときの ALT+F4 は、Sleep の時間をこらえきれずにウィンドウを変えると、思わぬものが閉じてしまうという事故につながります。
# 試している間に、実際にはまりました X-|
いろいろと制約があるのでしょうが、他のソフトを導入することで、より確実に自動化できます。
TransFreeBSD さんが挙げている ImageMagic は COM として VBScript から制御できますし、クリップボードからの取り込みもできたはずです。
他には、こんなのも見つけました。
http://www.nirsoft.net/utils/nircmd.html
本日、要件が変わり、Excelで計算して出力した表とグラフが1枚のシートにある画像を取得すれば良いということになりました。
まとめとしては以下の手順になりました。
・指定したCSVファイルを開く(ExcelでOK)
・指定したExcelファイルを開く
・CSVの指定範囲のセルをコピー
・Excelのシート2の指定範囲のセルに値のみ貼付け
・Excelのシート1をアクティブに変更しスクショを取得
・当該スクショの座標を指定してトリミング後(指定名(できれば固定で))保存
こんな流れなんですが、できますか?
VBScript で ImageMagick の OLE を使って、画像の切り抜きをしているソースがあります。
convert コマンドのパラメータを、Convert メソッドは そのまま 受け取るようです。
http://imagemagick.org/script/ImageMagickObject.php
ローカルドライブでは問題なく動作しました。
ただ、ネットワークドライブ上ではトリミングがされない状態で保存されるのですが、何が問題なのでしょうか?
実行結果としてはローカルで問題なく動くのですが、ネットワーク越しだとカレントフォルダにpng.bmpというファイル(1つ上の階層に保存してあるファイルをbmpに変換しただけのファイル)が保存されるだけでトリミングが実行されません。
実行タイミングが関係あるかと思いtimeout 3等を入れてみましたが、変化はありませんでした。
バッチ処理を行っている画面も1処理ずつ見ていますが、エラーは出ていません。
何が原因でしょう??