WSH(JScript) + WIA で画像変換
WSH(Windows Script Host)とWIA(Windows Image Acquisition)を使用してWindowsの標準機能のみで画像操作についての忘却録です。
画像変換
convertImage.wsf<?xml version="1.0" encoding="UTF-16" standalone="yes" ?>
<package>
<job>
<script language="JavaScript">
//<![CDATA[
(function() {
"use strict";
var wiaFormatBMP = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}";
var wiaFormatPNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}";
var wiaFormatGIF = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}";
var wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";
var wiaFormatTIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}";
var formatSet = {
"bmp": wiaFormatBMP,
"png": wiaFormatPNG,
"gif": wiaFormatGIF,
"jpg": wiaFormatJPEG,
"jpeg": wiaFormatJPEG,
"tif": wiaFormatTIFF
};
/**
* 画像変換(WIA)
* @param {string} input - 入力ファイルパス
* @param {string} output - 出力ファイルパス
* @param {number} [opt_quality=100] - 品質(1~100)
* JPEG 圧縮の品質を指定する
* @param {string} [opt_compress] - 不明
* TIFFでは、圧縮スキームを指定する
* @return {boolean} 結果
*/
function convertImage(input, output, opt_quality, opt_compress) {
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)) {
if (format in formatSet) {
// ファイル読み込み
var img = new ActiveXObject("WIA.ImageFile");
img.LoadFile(input);
// 変換
var ip = new ActiveXObject("WIA.ImageProcess");
ip.Filters.Add(ip.FilterInfos("Convert").FilterID);
ip.Filters(1).Properties("FormatID").Value = formatSet[format];
if (opt_quality != null) {
ip.Filters(1).Properties("Quality").Value = opt_quality;
}
if (opt_compress != null) {
ip.Filters(1).Properties("Compression").Value = opt_compress;
}
img = ip.Apply(img);
// ファイル書き込み
img.SaveFile(fs.GetAbsolutePathName(output));
img = null;
ip = null;
ret = true;
}
}
return ret;
}
function main() {
convertImage('./test.bmp', './test.png');
convertImage('./test.bmp', './test.gif');
convertImage('./test.bmp', './test.jpg');
convertImage('./test.bmp', './test.jpg');
convertImage('./test.bmp', './test5.jpg', 5);
convertImage('./test.bmp', './test.tif');
}
main();
})();
//]]>
</script>
</job>
</package>