ペルプデスクのお手伝いをしてるのですが、担当者が、お客さんからデジカメの50個ほどの大量画像の圧縮を毎日のように一個ずつ、MS Paintで水平方向800ピクセルに圧縮していました。。。
あまりにも単調作業で、助けてあげたいと思い、VBScriptなら、MS Paintを使って、
自動や一括で圧縮できるのでは?と思ったのですが、今のところ、サンプルコードとかが見つかりませんでした。
何か方法ありませんでしょうか?
他の画像ソフトなら出来るとかでも良いかと思います。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
ガッツリスクリプトですが、Windows7以降プリインストールのPowerShellを使う手もあります。
以下のサンプルコードの使い方
- Windows PowerShell ISE を起動(Windowsキー→Powershellで検索すれば出てくるはず)
- 画面上の白いところ(無題~のタブの下)にコードをコピペ
$画像の保存されているフォルダ
などを指定- 実行(上の緑色の▶ボタン or F5)
powershell
1# 設定項目 2[string]$画像の保存されているフォルダ = 'C:\Users\TestUser\Pictures' 3[string]$縮小した画像の保存先 = '{0}\圧縮画像' -f $画像の保存されているフォルダ 4[int]$画像の横幅 = 800 #px 5 6[string]$元の画像の拡張子 = '*.jpg' 7 8 9# 画像操作に必要なライブラリ読み込み 10Add-Type -AssemblyName System.Drawing 11[Drawing.Imaging.ImageFormat]$縮小後画像の形式 = [Drawing.Imaging.ImageFormat]::Jpeg 12 13# 出力先のフォルダを作成(すでにある場合は何もしない) 14[IO.Directory]::CreateDirectory( $縮小した画像の保存先 ) > $null 15 16# $画像の保存されているフォルダ の中から、$元の画像の拡張子 でフィルターしたものを探す 17Get-ChildItem -LiteralPath $画像の保存されているフォルダ -Filter $元の画像の拡張子 | 18 %{ 19 # 見つかったものそれぞれに対して処理 ( $_ -is [IO.FileInfo] ) 20 21 # 元となる画像読み込み 22 [Drawing.Bitmap]$srcBmp = [Drawing.Bitmap]::FromFile($_.FullName) 23 # 画像のメタデータ(撮影日時など)取得 24 [Drawing.Imaging.PropertyItem[]]$props = $srcBmp.PropertyItems 25 26 27 # 新しい画像の大きさを計算 28 [int]$newWidth = $画像の横幅 29 [int]$newHeight = [int]( ($srcBmp.Height / $srcBmp.Width) * $newWidth ) 30 31 # 縮小した画像を作成(メモリ内) 32 [Drawing.Bitmap]$destBmp = 33 New-Object -TypeName Drawing.Bitmap -ArgumentList $srcBmp, $newWidth, $newHeight 34 # 画像のメタデータ(撮影日時など)設定 35 $props | %{ $destBmp.SetPropertyItem( $_ ) <# $_ -is [Drawing.Imaging.PropertyItem] #> } 36 37 # 縮小した画像の保存先 38 [string]$destPath = [IO.Path]::Combine( 39 $縮小した画像の保存先, 40 [IO.Path]::ChangeExtension($_.Name, $縮小後画像の形式.ToString())) 41 42 # ファイルの存在確認 43 if ( Test-Path -LiteralPath $destPath ) { 44 Write-Host ('「{0}」はすでに存在しています。' -f [IO.Path]::GetFileName($destPath)) 45 } else { 46 # $縮小後画像の形式 で保存 47 $destBmp.Save($destPath, $縮小後画像の形式) 48 Write-Host ('「{0}」を「{1}」として保存しました。' -f $_.Name, [IO.Path]::GetFileName($destPath)) 49 } 50 51 # 片付け 52 $destBmp.Dispose() 53 $srcBmp.Dispose() 54 } 55 56# 保存したフォルダを開く 57explorer.exe $縮小した画像の保存先
実行ポリシーによる制限を解除するコード
posh
1Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 2 3# 省略形 4Set-ExecutionPolicy RemoteSigned CurrentUser
投稿2018/04/03 12:59
編集2018/04/06 09:17総合スコア2166
0
直接的な回答ではありませんが, Windows環境であればInternet ExplorerをWSH(JScript)で制御し, canvas
要素を使って画像処理を行う方法があります.
xml
1<job id="main"> 2<script language="javascript"> 3(function(){ 4try{ 5 //IEの起動(非表示とする) 6 var ie = WScript.CreateObject("InternetExplorer.Application"); 7 ie.Navigate("about:blank"); 8 ie.Visible = false; 9 10 //base64変換用(画像の入出力に用いる) 11 var node = WScript.CreateObject("Microsoft.XMLDOM").createElement("dummy"); 12 node.dataType = "bin.base64"; 13 14 //document,windowオブジェクトの入手 15 var document = ie.document; 16 var window = document.parentWindow;//※必要であれば 17 18 //canvas要素の設定 19 var canvas = document.createElement("canvas"); 20 canvas.width = canvas.height = 200; 21 22 //グラフィックの描画 23 var ctx = canvas.getContext("2d"); 24 ctx.fillStyle = "yellow"; 25 ctx.fillRect(0, 0, 200, 200); 26 27 //ローカル画像の描画(画像はバイナリで取得しbase64形式とする) 28 var strin = WScript.CreateObject("ADODB.Stream"); 29 strin.Open(); 30 strin.Charset = "iso-8859-1"; 31 strin.Type = 1;//binary 32 strin.LoadFromFile("in.jpg"); 33 node.nodeTypedValue = strin.Read(); 34 strin.Close(); 35 var img = document.createElement("img"); 36 img.src = "data:;base64," + node.text;//IEは画像形式を自動判定する 37 while(!img.complete) WScript.sleep(100);//NOTE:イベントを用いずともよい 38 ctx.drawImage(img, 25, 25, 150, 150); 39 document.body.appendChild(canvas); 40 41 //カンバスグラフィックの保存(base64形式をバイナリ形式に変換する) 42 node.text = canvas.toDataURL("image/png").split(",")[1]; 43 var strout = WScript.CreateObject("ADODB.Stream"); 44 strout.Open(); 45 strout.Charset = "iso-8859-1"; 46 strout.Type = 1; 47 strout.Write(node.nodeTypedValue); 48 strout.SaveToFile("result.png", 2);//overwrite 49 strout.Close(); 50 51 WScript.echo("処理完了"); 52}catch(e){ 53 WScript.echo(e.message); 54}finally{ 55 ie.Quit(); 56} 57})();
その他にもこんなやりかたが考えられるでしょう.
- (アプリケーションを導入してもよいのであれば)ImageMagicを用いて画像の変換処理をバッチ化する方法があります.
https://www.imagemagick.org/script/index.php
- PhotoShopがインストールされている環境であれば, PhogoShopをWSHで操作する方法があります.
投稿2018/04/03 10:56
総合スコア4756
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/03 13:14
2018/04/03 13:29
0
「一括画像変換」でぐぐると、それらしいツールが出てきます。
どうでしょうか
投稿2018/04/03 10:50
総合スコア88042
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/03 10:59
2018/04/03 11:02
2018/04/03 11:10
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/03 13:16
2018/04/03 13:29
2018/04/05 12:09
2018/04/05 12:57
2018/04/06 01:38
2018/04/06 09:19
2018/04/06 11:20
2018/04/09 13:11