Библиотека сайта rus-linux.net
Использование GIMP и pngquant в процессе разработки веб-страниц
Автор: Владимир Царьков
Дата публикации: 18.04.2012
Статья содержит описание методов использования GIMP
и pngquant
с целью облегчения и автоматизации действий, часто выполняемых веб-разработчиками.
Обработку тестовых изображений мы осуществляли с помощью
GIMP
(GNU Image Manipulation Program) версии 2.6.11 и pngquant
1.0.
Сконцентрируемся на методах подготовки графики к размещению в Интернет, а также автоматизированной генерации HTML кода, связанного с нею. Люди, занимающиеся разработкой веб-страниц часто решают следующие вопросы.
Как сделать изображение прозрачным вне контура нарисованного объекта?
Будем считать, что обрабатываемая картинка хранится в формате PNG (Portable Network Graphics. Подробнее см. [Миано2003, С. 249-318]).
Добавьте альфа-канал к изображению. Это делается выбором
вкладки ``Слой -> Прозрачность -> Добавить альфа-канал
'' (Layer -> Transparency -> Add alpha-chanel).
Выберите инструмент ``Выделение соседних областей по схожести цвета
'' (Select Continguous Regions;
см. панель инструментов). Далее последовательно, одну за одной выделяйте области изображения, которые должны
быть удалены и нажимайте кнопку <Delete> для их устранения.
На месте удалённых частей картинки останется ``прозрачный фон''.
Как уменьшить объём памяти, занимаемый изображением?
Файлы в формате PNG, особенно содержащие однотонно закрашенные области,
хорошо ужимаются средствами программы pngquant
. В системе на базе deb
пакетов её можно установить командой sudo apt-get install pngquant
.
К примеру, созданные программой Dia
файлы PNG обычно содержат
минимум цветов. Для них подойдёт команда pngquant 8 ИМЯ_ФАЙЛА.png
.
Подробнее см. man pngquant
.
Как создать карту (тэг map языка HTML) изображения?
Выберите в меню ``Фильтры -> Веб -> Карта изображения
'' (Filters -> Web -> Image map).
Перед вами появится окно для создания карты изображения. Подразумеватся, что
вы достаточно опытный пользователь, чтобы разобраться в его нехитром интерфейсе.
Если что --- читайте справочное руководство.
GIMP
сохраняет получившуюся карту в файле с расширением map. Ниже представлен
пример того, что в нём может находиться.
<img src="ИМЯ_ФАЙЛА_ИЗОБРАЖЕНИЯ.png" width="303" height="278" border="0" usemap="#map" /> <map name="map"> <!-- #$-:Image map file created by GIMP Image Map plug-in --> <!-- #$-:GIMP Image Map plug-in by Maurits Rijk --> <!-- #$-:Please do not edit lines starting with "#$" --> <!-- #$VERSION:2.3 --> <!-- #$AUTHOR:vl --> <area shape="poly" coords="98,36,97,31,143,137,166,14,133,9,117,22" alt="file 1 HTML" href="file1.html" /> <area shape="poly" coords="153,162,123,244,206,268,196,241" alt="FILE 2 HTML" href="file2.html" /> </map>
По сути --- это текстовый файл, содержимое которого нужно вставить в код разрабатываемой вами веб-страницы.
Как разделить изображение на части и поместить его в HTML таблицу?
Воспользуйтесь вкладкой ``Изображение -> Направляющие
'' (Image -> Guides)
для того, чтобы разбить изображение на сегменты, которые потом станут
клетками таблицы на языке HTML. Затем нажмите ``Фильтры -> Веб -> Slice...
''
(Filters -> Web -> Slice...) и завершите нарезку картинки. На выходе у вас получится
файл с HTML кодом таблицы и набор изображений, составляющих исходную картинку.
В процессе выполнения этой операции могут появиться сообщения об ошибках. Два из них стоит отметить особо.
Traceback (most recent call last): File "/usr/lib/gimp/2.0/python/gimpfu.py", line 692, in response dialog.res = run_script(params) File "/usr/lib/gimp/2.0/python/gimpfu.py", line 353, in run_script return apply(function, params) File "/usr/lib/gimp/2.0/plug-ins/py-slice.py", line 117, in pyslice left, right, top, bottom, i, j, "")) File "/usr/lib/gimp/2.0/plug-ins/py-slice.py", line 182, in slice pdb.gimp_file_save(temp_image, temp_drawable, filename, filename) RuntimeError: Процедура 'gimp-file-save' вызвана с некорректным идентификатором для аргумента 'drawable'. Скорее всего, модуль пытается работать со слоем, который уже не существует.
Причина появления обозначенного сообщения кроется в том, что изображение, которое мы хотим разрезать на части, содержит несколько слоёв. Таким образом, решить проблему можно соединив (merge) все слои изображения перед ``резкой'' (slicing).
Traceback (most recent call last): File "/usr/lib/gimp/2.0/python/gimpfu.py", line 692, in response dialog.res = run_script(params) File "/usr/lib/gimp/2.0/python/gimpfu.py", line 353, in run_script return apply(function, params) File "/usr/lib/gimp/2.0/plug-ins/py-slice.py", line 117, in pyslice left, right, top, bottom, i, j, "")) File "/usr/lib/gimp/2.0/plug-ins/py-slice.py", line 172, in slice temp_image.crop(right - left, bottom - top, left, top) TypeError: integer argument expected, got float
Избавиться от указанного выше сообщения можно заменив строку номер
172 в файле /usr/lib/gimp/2.0/plug-ins/py-slice.py
. Закомментируйте
(с помощью знака решётка: #
) старое содержимое 172-ой строки
и вставьте следующую строку:
temp_image.crop(int(right - left), int(bottom - top), int(left), int(top))
.
Рассмотренные приёмы работы с GIMP
и pngquant
позволяют быстро решать задачи, возникающие в процессе создания веб-страниц.
Литература для самообразования
- Миано Дж. PNG. Развёртывание сжатых данных PNG-изображения. Создание PNG-файлов // Форматы и алгоритмы сжатия изображений в действии. Учеб. пособ. М.: Издательство Триумф, 2003. С. 249-318.
- Хилл Ф. Альфа-канал и смешивание изображений // OpenGL. Программирование компьютерной графики. Для профессионалов. СПб.: Питер, 2002. C. 632-636.
- Roelofs G., Зенков И., Busheff D. PNG: Простое введение в особенности формата. URL: http://rus-linux.net/zen/png_feature/png_feature.html (дата обращения: 10.04.2012).
- GIMP keyboard shortcuts. URL: http://www.gimpusers.com/gimp/hotkeys (дата обращения: 10.04.2012).
- pngquant. URL: http://www.libpng.org/pub/png/apps/pngquant.html; http://pngquant.org/ (дата обращения: 10.04.2012).