Windows Image Acquisition Automation Layer (WIA) - неплохой инструмент. Вернее, его можно рассматривать как программный драйвер для обработки изображений и взаимодействия с мультимедийными устройствами - цифровыми камерами, сканерами, веб-камерами. Меня интересует (пока) только обработка существующих изображений. Для этого используются следующие фильтры
- обрезка,
- масштабирование,
- вращение,
- редактирование метаданных (EXIF),
- рамки (виньетки?),
- манипуляция с цветом,
- перевод из одного графического формата в другой.
Список поддерживаемых фильтров и их описание можно узнать выполнив следующий код:
var imgproc = new ActiveXObject('WIA.ImageProcess');
var s = [];
for (var e = new Enumerator(imgproc.FilterInfos); ! e.atEnd(); e.moveNext()) {
var p = e.item();
s.push('==========');
s.push(p.Name);
s.push(p.Description);
}
WScript.Echo(s.join('\n'));
Из этого списка я узнал имя фильтра Scale и требуемые его свойства для заполнения. Пусть имеется некий файл, для которого необходимо создать уменьшенную копию размером не более 150x150:
// исходное и результирующее изображения
var i = 'image.jpg';
var o = 'image2.jpg';
// размеры будущего изображения
var w = 150;
var h = 150;
// создать объект-обработчик ...
var imgproc = new ActiveXObject('WIA.ImageProcess');
// ... добавить требуемый фильтр ...
imgproc.Filters.Add(imgproc.FilterInfos('Scale').FilterID);
// ... и заполнить свойства фильтра
imgproc.Filters(1).Properties('MaximumWidth') = w;
imgproc.Filters(1).Properties('MaximumHeight') = h;
// создать объект-изображение, загрузить графический файл ...
var imgfile = new ActiveXObject('WIA.ImageFile');
imgfile.LoadFile(i);
// ... применить к нему фильтр ...
imgfile = imgproc.Apply(imgfile);
// ... и сохранить полученное изображение под другим именем
imgfile.SaveFile(o);
WIA компонент поддерживается начиная с Windows XP SP1+. Требуется регистрация в системе библиотеки WIAAut.dll, которую необходимо предварительно скачать.
Мое мнение - все бы ничего, но это ложка дегтя.
( 2 * b ) || ! ( 2 * b )