Pull to refresh

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

Reading time 3 min
Views 5K
imageВ нашем офисе мы используем 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 файлов для нескольких кнопок, с разными 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 одна кнопка), и как их расположить на панели кнопок. Делаем выбор и подтверждаем. Готово.
Tags:
Hubs:
+48
Comments 7
Comments Comments 7

Articles