1 (изменено: Rumata, 2011-04-04 05:53:16)

Тема: API для доступа к средствам обработки изображений

Намеренно не указал язык программирования, так как интересуют любые, хотя предпочтительные - JScript, VBScript.

Существует API для доступа из скрипта к средствам обработки изображений, например, MS Office Picture Manager, аналогичный WinWord?

var word = new ActiveXObject('Word.Application');
...
( 2 * b ) || ! ( 2 * b )

2

Re: API для доступа к средствам обработки изображений

Не очень понятен вопрос. Просто обрабатывать растровые изображения можно с помощью WIA или GFLAx.

3

Re: API для доступа к средствам обработки изображений

alexii пишет:

... растровые изображения ... WIA или GFLAx.

Мне это тоже не понятно. Мне хотелось бы иметь нечто подобное этому:

var img = new ActiveXObject('SomethingImageManager.Application');
img.Open('image1.jpg');
img.SetSizeInPixels(100, 100);
img.SaveAs('image2.jpg');
img.Quit();

По аналогии, как это делается, например, с WinWord, через Automation.

( 2 * b ) || ! ( 2 * b )

4

Re: API для доступа к средствам обработки изображений

Посмотрите здесь: VBScript: работа с графическими файлами.

5

Re: API для доступа к средствам обработки изображений

Это легко реализуется с помощью PHP+GD и 1-2 библиотек. Но хотелось бы от внешних программ (исполнимый файл, библиотеки, громоздкие платформы вроде .Net) перейти к нативным средствам системы, реализующим минимальную обработку изображения. Например, имея некоторую библиотеку создания thumbnails, следующий скрипт реализует желаемое.


include_once('includes/Thumbnail.php');

$i = 'image.jpg';
$o = 'image2.jpg';

$options = array(
    'width'  => 160,
    'height' => 160,
    'type'   => IMAGETYPE_JPEG,
);

Thumbnail::output($i, $o, $options);
( 2 * b ) || ! ( 2 * b )

6

Re: API для доступа к средствам обработки изображений

WIA идёт в комплекте (ничего другого «комплектного», кроме WinAPI/GDI+ нет) — что не так?

7

Re: API для доступа к средствам обработки изображений

WIA. Это очень близко к тому, что надо. Спасибо. Я сейчас смотрю его.

( 2 * b ) || ! ( 2 * b )

8 (изменено: Rumata, 2011-04-04 12:15:22)

Re: API для доступа к средствам обработки изображений

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 )

9

Re: API для доступа к средствам обработки изображений

IrfanView имеет командную строку
как сделать чтобы ирфан все выделенные файлы ресайзил по заданным параметрам

10

Re: API для доступа к средствам обработки изображений

!k. Спасибо. Это хороший пример при наличии IrfanView. Предполагаю, что ACDSee тоже имеет командную строку. Но я не пользуюсь этими программами. Предполагал, что есть офисные COM-объекты для работы с изображениями. Лучшим вариантом было бы использовать - при их наличии - только встроенные в систему средства. Найденное решение  - использовать WIA - на мой взгляд лучше.

( 2 * b ) || ! ( 2 * b )

11

Re: API для доступа к средствам обработки изображений

Еще пример использования WIA.