; batch_resize_all.ahk ; ▽ 概要 ; Irfanviewを使用してドロップされたディレクトリ内の全ての画像を指定したサイズにリサイズします。 ; サブディレクトリのファイルも変換対象になり、全てのファイルは同じ拡張子のまま上書きされます。 ; ▽ 使い方 ; このファイルを任意のフォルダに置き、Irfanviewのインストールパスが下記と異なる場合は修正 ; してください。 ; 設定が済んだら、フォルダごと このahkアイコンにドロップすればダイアログを開きます。 ; ダイアログにフォルダをドロップしても同じです。 ; リサイズは初期値は 50p になっています(width=50%、height=50%)。 ; パーセント指定でなくピクセル数で指定もできます。その場合、整数を「,」区切りで入力し、 ; 単位は必要ありません。 ; いずれの場合も縦横比は保持され、ピクセル数指定の場合アスペクト保持で指定サイズに収まる大きさ ; にリサイズされます。 ; 変換が終わるとメッセージが表示され、変換結果をサムネイルで閲覧するか選べます。 ; このとき、サブディレクトリも展開された形で表示します。 ; ▽ 仕様 ; ダイアログにサイズを入力した後は何もウィンドウを表示せずに実行します。 ; フォルダ名やパスにダメ文字が含まれると失敗する可能性があります。 ; 下記のf_typeで定義されたファイルタイプのみ変換の対象になります。当然ながらi_view32で開けない ; ファイルはリサイズできません。 ; 今のところ、ダイアログでの設定が反映されるのはpngとjpgだけです。 ; それ以外のファイル(gifやtifなど)はi_view32のデフォルト値が適用されます。 ; 設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; i_view = C:\Progra~1\IrfanView\i_view32.exe f_type = *.jpg`;*.png ; ※↑セパレータのセミコロンの前には「`」が必須 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #NoEnv SendMode Input IfNotExist, %i_view% { MsgBox, 16, error, %i_view% not found. Run, Edit %A_ScriptFullPath% return } ; Generated using SmartGUI Creator 4.0 Gui, Font, S10 CDefault, Gothic Gui, Add, Picture, x16 y14 w32 h32 , C:\Icons\Set1\i_view32.ico Gui, Add, Text, x52 y14 w284 h32 , `nフォルダをこの窓にドロップしてください Gui, Add, Edit, x16 y50 w320 h20 vDir, %1% Gui, Add, Text, x26 y78 w190 h20, PNG Compression Level (1 to 9) Gui, Add, Edit, x220 y74 w46 h20 vPng_q, 6 Gui, Add, Text, x26 y102 w190 h20, JPG Save Quality (1 to 100) Gui, Add, Edit, x220 y98 w46 h20 vJpg_q, 91 Gui, Add, CheckBox, x46 y118 w170 h20 vChk, use color subsampling Gui, Add, Text, x26 y146 w190 h20, Resize dimensions. (eg. 640,480) Gui, Add, Edit, x220 y142 w116 h20 vSize, 50p Gui, Add, Button, x170 y175 w80 h21 gAbort, Abort(&X) Gui, Add, Button, x256 y175 w80 h21 gRun, Run(&E) Gui, Show, x200 y200 w352 h209, i_view32 batch resize return GuiClose: ExitApp Abort: ExitApp Run: Gui,Submit,Hide IfInString, size, %A_Space% StringReplace, size, size, %A_Space%, IfInString, size, p { StringGetPos, pos, size, p StringMid, size, size, 1, %pos% size := Round(size) size = %size%p`,%size%p } else IfInString, size, , { if RegExMatch(size, "(\.|[a-zA-Z])") <> 0 { MsgBox, 16, error, 無効な数が入力されました。「.」(カンマ)は使えません。`nピクセル指定時は数字に単位を付けないでください。 ExitApp } } else{ MsgBox, 16, error, 入力が正しくありません。 ExitApp } FileGetAttrib, var, %Dir% if (Dir = "") ExitApp else if (var <> "D") { MsgBox, 16, error, ディレクトリ(フォルダ)をドロップしてください。`nファイルはドロップできません。 ExitApp } if (Png_q = "") Png_q = 6 if (Jpg_q = "") Jpg_q = 91 if Chk <> 1 Chk = 0 ifExist, %A_Temp%\i_view.ini FileDelete, %A_Temp%\i_view.ini FileAppend, ( [PNG] SavePNGTransp=0 PngOut=0 CompressionLevel=%Png_q% [JPEG] Load Grayscale=0 ExifRotate=1 Save Quality=%Jpg_q% Save Progressive=0 Save Grayscale=0 NoSampling=%Chk% KeepExif=0 KeepCom=0 KeepIptc=0 ExifOrient=0`n ),%A_Temp%\i_view.ini f_list = %A_Temp%\f_list.txt FileAppend, cd /d %Dir%`nDIR /s /b %f_type% >%f_list%, %A_Temp%\list.bat RunWait, %A_Temp%\list.bat, ,hide FileRead, all_text, %f_list% Loop { if ErrorLevel <> 0 { Sleep, 500 continue } else if (all_text = "") { MsgBox, 16, error, 変換対象のファイルが見つかりませんでした。`n`nスクリプトを終了します。 return } else break } Loop, Read, %f_list% { SplitPath, A_LoopReadLine, , , ext Run, "%i_view%" "%A_LoopReadLine%" /resize=(%size%) /aspectratio /convert="$N.%ext%" /ini="%A_Temp%\" } FileDelete, %f_list% FileDelete, %A_Temp%\list.bat FileDelete, %A_Temp%\i_view.ini MsgBox, done ExitApp return GuiDropFiles: GuiControl,,Dir,%A_GuiEvent% return