VBScriptで画像を一括リサイズ

VBScriptで画像の一括リサイズを行ないます。
便利なライブラリがあるので、そちらを使用します。
簡単だしPNG対応ってのもGood。
VB標準のLoadPicture関数はPNGに対応してないんですね、、。


Doodle2 VBS用画像描画・変換COMコンポーネント
http://www.vector.co.jp/soft/winnt/prog/se219120.html

'PicConvertEx.vbs
Option Explicit

Const SCRIPT_NAME = "リサイズたん(*≧m≦)=3"
Dim strExt, rszFolder
Dim yoko, tate, tate_flg, stretch, i
Dim fs, d, objArgs

stretch = False
tate_flg = False
Set fs = WScript.CreateObject("Scripting.FileSystemObject")
Set d = CreateObject("Doodle2.MyCanvas")
Set objArgs = WScript.Arguments 
If objArgs.Count = 0 Then WScript.Quit

yoko = InputBox("横幅のピクセル値を入力して下さい。", SCRIPT_NAME)
If yoko = "" Then WScript.Quit
If IsNumeric(yoko) = False Then
    MsgBox "数値を入力して下さい。", vbExclamation, SCRIPT_NAME
    WScript.Quit
ElseIf yoko = 0 Then
    MsgBox "0px はダメです。", vbExclamation, SCRIPT_NAME
    WScript.Quit
End If
tate = InputBox("縦幅のピクセル値を入力して下さい。", SCRIPT_NAME)
If tate <> "" Then
    tate_flg = True
    If IsNumeric(tate) = False Then
        MsgBox "数値を入力するか、何も入力しないで下さい。", vbExclamation, SCRIPT_NAME
        WScript.Quit
    End If
End If
If tate_flg Then
    If MsgBox("縦横の比率を変えますか?", vbYesNo + vbQuestion, SCRIPT_NAME) = vbYes Then stretch = True
End If

rszFolder = fs.GetParentFolderName(objArgs(0)) & "\Resized"
For i = 0 to objArgs.Count - 1
    strExt = UCase(fs.GetExtensionName(objArgs(i)))
    Select Case strExt
        Case "JPG", "GIF", "PNG", "BMP"
        If fs.FolderExists(rszFolder) = False Then fs.CreateFolder rszFolder
        If tate_flg = False Then
            d.LoadFromFile objArgs(i)
            tate = CLng(d.Height / (d.Width / yoko))
        End If
        d.ConvertFile objArgs(i), rszFolder & "\" & fs.GetFileName(objArgs(i)), strExt, yoko, tate, , , True, stretch
    End Select
Next

Set fs = Nothing
Set d = Nothing


結果的にIfばかりになってごちゃごちゃしてしまった…(笑)
はじめはファイル名の「Ex」が無くて、もっとシンプルなVBScriptでしたが、
最近片幅を決定したらもう片幅を自動で算出する機能を追加して、
なんだか見辛くなってしまいました。でもまぁ使えます。

使い方


リサイズする画像ファイルをドラッグします。勿論、複数ドラッグ(一括リサイズ)も可能。
右クリックの「送る」を使うのも良いです。
オリジナルのデータには上書きせず、画像データのフォルダに「Resized」フォルダが作成され、
その中にリサイズ後のデータが格納されます。
既に同名ファイルが存在する場合、上書きします。
オリジナルのデータは残しての処理なので、上書きで良いかなって(笑)

InputBoxとMsgBox


色々と聞かれる訳ですが、まず、横幅は必ず指定します。
縦幅は、指定する場合は値を入力、指定しない場合は何も入力しません。(つまりそのままボタンを押す)


指定しない場合は比率を保ち、自動的に縦幅を割り出します。


猫画像のリサイズ1


もし縦幅を指定した場合、縦横の比率を変更するかどうかのMsgBoxが表示されます。
比率を保つ場合は、上下か左右に白の余白が出来ると思います。


猫画像のリサイズ2


比率を変える場合、指定した画像サイズいっぱいに伸縮します。
この場合猫ちゃんは横長でしたのでスリムになりましたが、
縦長の画像の場合、当然ながらおデブちゃんになります(笑)


猫画像のリサイズ3


ConvertFileの引数で画質や、ぼかすかどうかなど細かい設定が出来ますので、
詰めたい場合はDoodle2のヘルプを見ると良いと思います。



Windows自動処理のためのWSHプログラミングガイド

Windows自動処理のためのWSHプログラミングガイド