Пакетная обработка изображений в Picasa с помощью ImageMagick

27.07.2011
Olexandr Savchuk

В нашем офисе мы используем Google Picasa для обработки множества сканов и фотографий. Мы используем Picasa уже несколько лет и очень довольны. Однако, Picasa не предоставляет всех необходимых нам функций, а некоторые слишком сложно использовать при нашем объеме работ. Чтобы упростить нашим сотрудникам задачу, я использовал два основных компонента: набор консольных утилит ImageMagick для обработки изображений, и Picasa Button API.

В качестве примера я опишу небольшое приложение, которое мы используем для совмещения нескольких изображений в одно одним кликом прямо из интерфейса 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 файлов для нескольких кнопок.

Часть 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://; на моей системе установлен сервер для разработки, так что я воспользовался им. Вот код моего HTML-файла для установки кнопки:

<html>
 <body>
  <a href="picasa://importbutton/?url=http://localhost/olex-stitcher.pbz">Install</a>
 </body>
</html>

Открываем файл в любом браузере и нажимаем на ссылку. Открывается Picasa и спрашивает, какие кнопки установить (выбор всего один, если в нашем PBZ одна кнопка), и как их расположить на панели кнопок. Делаем выбор и подтверждаем. Готово.

Пока нет комментариев.

Leave a Reply