В нашем офисе мы используем Picasa для обработки множества сканов и фотографий. Мы используем Picasa уже несколько лет и очень довольны. Однако, Picasa не предоставляет всех необходимых нам функций, а некоторые слишком сложно использовать при нашем объеме работ. Чтобы упростить нашим сотрудникам задачу, я решил автоматизировать некоторые процессы, используя два основных компонента: набор консольных утилит ImageMagick, и довольно малоизвестный Picasa Button API.
В качестве примера я опишу небольшое приложение, которое мы используем для совмещения нескольких изображений в одно, одним кликом прямо из интерфейса Picasa. Немного разобравшись с ImageMagick, можно легко модифицировать этот код для других задач.
Сначала нам понадобится кнопка в интерфейсе Picasa, которая будет запускать наш ImageMagick-скрипт. Чтобы создать такую кнопку средствами Button API, делаем следующие шаги:
PBF – по сути простой XML файл, описывающий нашу кнопку. Вот код моего PBF файла:
Хотя весь коd заключен в контейнер buttons, в одном файле можно описать только одну кнопку.
Обратим внимание на GUID в аттрибуте button/id. Для каждой кнопки нужно сгенерировать свой GUID. Также название PBF файла включает в себя этот GUID, {ca234ae3-6340-40c3-a46b-51a126bb887c}.pbf в моем примере.
Элементы label и tooltip особого объяснения не требуют. Следующий важный элемент – action; в нем описано, что произойдет при нажатии нашей кнопки. Picasa Button API предоставляет несколько разных функций кнопок; мы же используем простой запуск исполняемого файла, который запустит скрипт по имени stitch.cmd, находящийся в S:\Tools\ (S:\ – расшаренная папка на офисном сервере). Сам скрипт я объясню в дальнейшем.
Можно включить собственную иконку для нашей кнопки. Иконка должна быть в PSD файле, названном по той же схеме с GUID ({ca234ae3-6340-40c3-a46b-51a126bb887c}.psd в моем примере), в одном слое. При использовании иконки, требуется включить дополнительную строку в PBF, внутри элемента button:
PBZ есть ничто иное, как обычный ZIP архив, содержащий наш PBF (и PSD с иконкой, если мы ее используем), с расширением .pbz. Этот файл является инсталляционным пакетом нашей кнопки для Picasa, так что его необходимо назвать осмысленно: Picasa различает установленные кнопки по именам их PBZ пакетов. В одном PBZ могут содержаться несколько PBF файлов для нескольких кнопок, с разными GUID.
Поскольку ImageMagick предоставляет консольные утилиты для обработки изображений, простейший способ его автоматизировать – bat-скрипты. Вот код моего скрипта stitch.cmd, который совмещает несколько изображений вертикально в одно:
Когда скрипт вызывается нажатием кнопки из Picasa, ему передаются полные имена файлов всех выбранных картинок как аргументы.
Сначала перейдем в папку, где установлен наш ImageMagick, чтобы избежать возможных проблем с PATH. Потом сгенерируем название готового изображения, взяв полный путь из первого файла (первый аргумент) и добавив собственное имя файла.
Теперь воспользуемся небольшим bat-хаком: с помощью цикла for считаем вывод команды (identify из пакета ImageMagick) в переменную. Это дает нам ширину первого изображения. Наконец, вызываем montage и с его помощью комбинируем все изображения в одно, передав команде все имена изображений и имя файла вывода.
Установка кнопки в Picasa несколько нетривиальна. Picasa не позволяет установить PBZ напрямую, только через специальный URL из браузера. Нужно расположить наш PBZ так, чтобы он был доступен по ссылке через http://; на моей системе установлен сервер для разработки, так что я воспользовался им. Вот код ссылки для установки кнопки:
Открываем файл со ссылкой в любом браузере и жмем. Открывается Picasa и спрашивает, какие кнопки установить (выбор всего один, если в нашем PBZ одна кнопка), и как их расположить на панели кнопок. Делаем выбор и подтверждаем. Готово.
В качестве примера я опишу небольшое приложение, которое мы используем для совмещения нескольких изображений в одно, одним кликом прямо из интерфейса Picasa. Немного разобравшись с ImageMagick, можно легко модифицировать этот код для других задач.
Часть 1: кнопка в Picasa
Сначала нам понадобится кнопка в интерфейсе Picasa, которая будет запускать наш ImageMagick-скрипт. Чтобы создать такую кнопку средствами Button API, делаем следующие шаги:
1. Пишем файл PBF.
PBF – по сути простой XML файл, описывающий нашу кнопку. Вот код моего PBF файла:
<?xml version="1.0" encoding="utf-8" ?>
<buttons format="1" version="1">
<button id="{ca234ae3-6340-40c3-a46b-51a126bb887c}" type="dynamic">
<label>Combine</label>
<tooltip>Combine images vertically and save as a new image</tooltip>
<action verb="trayexec">
<param name="exe_name" value="stitch.cmd" />
<param name="exe_path" value="S:\Tools\" />
</action>
</button>
</buttons>
Хотя весь коd заключен в контейнер buttons, в одном файле можно описать только одну кнопку.
Обратим внимание на GUID в аттрибуте button/id. Для каждой кнопки нужно сгенерировать свой GUID. Также название PBF файла включает в себя этот GUID, {ca234ae3-6340-40c3-a46b-51a126bb887c}.pbf в моем примере.
Элементы label и tooltip особого объяснения не требуют. Следующий важный элемент – action; в нем описано, что произойдет при нажатии нашей кнопки. Picasa Button API предоставляет несколько разных функций кнопок; мы же используем простой запуск исполняемого файла, который запустит скрипт по имени stitch.cmd, находящийся в S:\Tools\ (S:\ – расшаренная папка на офисном сервере). Сам скрипт я объясню в дальнейшем.
2. Рисуем иконку (необязательно).
Можно включить собственную иконку для нашей кнопки. Иконка должна быть в PSD файле, названном по той же схеме с GUID ({ca234ae3-6340-40c3-a46b-51a126bb887c}.psd в моем примере), в одном слое. При использовании иконки, требуется включить дополнительную строку в PBF, внутри элемента button:
<icon name="{ca234ae3-6340-40c3-a46b-51a126bb887c}.psd/layer" src="pbz"/>
3. Пакуем кнопку в PBZ.
PBZ есть ничто иное, как обычный ZIP архив, содержащий наш PBF (и PSD с иконкой, если мы ее используем), с расширением .pbz. Этот файл является инсталляционным пакетом нашей кнопки для Picasa, так что его необходимо назвать осмысленно: Picasa различает установленные кнопки по именам их PBZ пакетов. В одном PBZ могут содержаться несколько PBF файлов для нескольких кнопок, с разными GUID.
Часть 2: скрипт ImageMagick
Поскольку ImageMagick предоставляет консольные утилиты для обработки изображений, простейший способ его автоматизировать – bat-скрипты. Вот код моего скрипта stitch.cmd, который совмещает несколько изображений вертикально в одно:
@echo off
cd /D "C:\Program Files\ImageMagick-6.7.1-Q16"
rem --- Output filename
set OUTFOLDER=%~dp1
set OUTFILENAME="%OUTFOLDER%Collage.jpg"
rem --- Imagemagick
for /f "delims=" %%a in ('identify -format "%%[fx:w]" %1') do @set WIDTH=%%a
montage -mode concatenate -resize %WIDTH% -tile 1x %* %OUTFILENAME%
Когда скрипт вызывается нажатием кнопки из Picasa, ему передаются полные имена файлов всех выбранных картинок как аргументы.
Сначала перейдем в папку, где установлен наш ImageMagick, чтобы избежать возможных проблем с PATH. Потом сгенерируем название готового изображения, взяв полный путь из первого файла (первый аргумент) и добавив собственное имя файла.
Теперь воспользуемся небольшим bat-хаком: с помощью цикла for считаем вывод команды (identify из пакета ImageMagick) в переменную. Это дает нам ширину первого изображения. Наконец, вызываем montage и с его помощью комбинируем все изображения в одно, передав команде все имена изображений и имя файла вывода.
Часть 3: установка
Установка кнопки в Picasa несколько нетривиальна. Picasa не позволяет установить PBZ напрямую, только через специальный URL из браузера. Нужно расположить наш PBZ так, чтобы он был доступен по ссылке через http://; на моей системе установлен сервер для разработки, так что я воспользовался им. Вот код ссылки для установки кнопки:
<a href="picasa://importbutton/?url=http://localhost/olex-stitcher.pbz">Install</a>
Открываем файл со ссылкой в любом браузере и жмем. Открывается Picasa и спрашивает, какие кнопки установить (выбор всего один, если в нашем PBZ одна кнопка), и как их расположить на панели кнопок. Делаем выбор и подтверждаем. Готово.