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(元データ)
512x512(元データ)

512x256(アスペクト比維持)
512x256(アスペクト比維持)

512x256(アスペクト比無視)
1024x256(アスペクト比無視)

参照