2018-05-21T06:41:07Z

WSH(JScript) + WIA で画像リサイズ

WSH(Windows Script Host)とWIA(Windows Image Acquisition)を使用してWindowsの標準機能のみで画像操作についての忘却録

画像のリサイズ

<?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>

実行結果

test512x512.jpg(元データ)
enter image description here

test512x256.jpg(アスペクト比維持)
enter image description here

test1024x256.jpg(アスペクト比無視)
enter image description here

参照

 コメントを書く