WSH(JScript) + WIA で画像リサイズ
WSH(Windows Script Host)とWIA(Windows Image Acquisition)を使用してWindowsの標準機能のみで画像操作についての忘却録
画像のリサイズ
resizeImage.wsf<?xml version="1.0" encoding="UTF-16" standalone="yes" ?>
<package>
<job>
<script language="JavaScript">
//<![CDATA[
(function() {
"use strict";
/**
* 画像リサイズ(WIA)
* @param {string} input - 入力ファイルパス
* @param {string} output - 出力ファイルパス
* @param {number} width - 最大の幅
* @param {number} height - 最大の高さ
* @param {boolean} [opt_aspect=true] - 縦横比維持
* @param {number} [opt_fidx=0] - フレーム インデック
* @return {boolean} 結果
*/
function resizeImage(input, output, max_width, max_height, opt_aspect, opt_fidx) {
var ret = false;
var fs = new ActiveXObject('Scripting.FileSystemObject');
var format = fs.GetExtensionName(output).toLowerCase();
input = fs.GetAbsolutePathName(input);
output = fs.GetAbsolutePathName(output);
if (fs.FileExists(input) && !fs.FileExists(output) && !fs.FolderExists(output)) {
// ファイル読み込み
var img = new ActiveXObject("WIA.ImageFile");
img.LoadFile(input);
// 変換
var ip = new ActiveXObject("WIA.ImageProcess");
ip.Filters.Add(ip.FilterInfos("Scale").FilterID);
ip.Filters(1).Properties("MaximumWidth").Value = max_width;
ip.Filters(1).Properties("MaximumHeight").Value = max_height;
if (opt_aspect != null) {
ip.Filters(1).Properties("PreserveAspectRatio").Value = opt_aspect;
}
if (opt_fidx != null) {
ip.Filters(1).Properties("FrameIndex").Value = opt_fidx;
}
img = ip.Apply(img);
// ファイル書き込み
img.SaveFile(fs.GetAbsolutePathName(output));
img = null;
ip = null;
ret = true;
}
return ret;
}
function main() {
resizeImage('./test512x512.jpg', './test512x256.jpg', 512, 256); // 256x256を作成
resizeImage('./test512x512.jpg', './test1024x256.jpg', 1024, 256, false);// 1024x256を作成
}
main();
})();
//]]>
</script>
</job>
</package>
実行結果
256x256(元データ)
512x256(アスペクト比維持)
512x256(アスペクト比無視)