Pull to refresh

Готовим скриншоты для документации в GIMP (часть 1)

Reading time5 min
Views24K
Как известно, неотъемлемой частью профессионального программного продукта является качественная документация. А документация, в свою очередь, немыслима без иллюстраций. В большинстве случаев иллюстрации представляют собой скриншоты, которые должны быть не только красивыми и информативными, но и единообразно оформленными. Последнее важно, если над разными разделами документации работают разные специалисты (технические писатели). В этой статье мы рассмотрим, как редактор растровой графики GIMP и его встроенный язык сценариев Script-Fu могут пригодиться для подготовки иллюстраций. В качестве примеров использованы скриншоты нашего продукта eXpressApp Framework.

Язык сценариев Script-Fu основан на Scheme (диалекте Lisp), и доступен в GIMP «из коробки» на любой платформе, поэтому мы выбрали именно его. В качестве первого простейшего примера рассмотрим скрипт, который применяет эффект тени с предустановленными параметрами. Почему не воспользоваться стандартным Drop Shadow? Да потому что он задает много лишних вопросов о параметрах тени. А мы хотим, чтобы тень была всегда одинаковая (черного цвета, с определёнными смещением, радиусом размытия и прозрачностью), и чтобы не приходилось заново задавать эти параметры. Итак, открываем любимый текстовый редактор и пишем скрипт:

(define (script-fu-quick-shadow image drawable)
	(gimp-context-push)
	(gimp-image-set-active-layer image drawable)
	(gimp-image-undo-group-start image)

	; Вызов стандартной процедуры script-fu-drop-shadow
	(script-fu-drop-shadow image drawable 3 4 10 '(0 0 0) 40 TRUE)   

	(gimp-image-undo-group-end image)
	(gimp-displays-flush)
	(gimp-context-pop)
)

(script-fu-register "script-fu-quick-shadow"
	"Быстрая тень"
	"Отбросить тень со стандартными параметрами:
	 смещение по X = 3, по Y = 4, радиус размытия = 10,
	 цвет черный, прозрачность 40%."
	"Василий Пупкин <pupkin@example.com>"
	"ООО Рога и Копыта"
	"2010/10/6"
	"RGB*"
	SF-IMAGE      "Image"      0
	SF-DRAWABLE   "Drawable"   0
)

(script-fu-menu-register "script-fu-quick-shadow"
                         "<Image>/Filters/Мои скрипты"
)

Типичный скрипт состоит из определения основной процедуры, которая делает всю работу (script-fu-quick-shadow), и вызовов встроенных процедур script-fu-register и script-fu-menu-register, которые регистрируют скрипт, определяют какие параметры он будет запрашивать у пользователя и создают соответствующий пункт в меню. Cкрипт «Быстрая тень» требует только наличия открытого RGB изображения, и запрашивать ничего не должен. В своей основной процедуре он обращается к встроенной процедуре script-fu-drop-shadow. Если хотите разобраться, что за параметры переданы этой процедуре, найдите её описание в «просмотре процедур Script-Fu» (Фильтры -> Script-Fu -> Консоль -> Просмотреть...). Вызовы процедур до и после вызова script-fu-drop-shadow типичны для большинства скриптов и требуютcя для передачи текущего контекста плагину, корректного взаимодействия с буфером Undo/Redo и обновления UI после отработки скрипта. Кстати, большинство встроенных фильтров GIMP реализованы на Script-Fu, и под Windows их исходники доступны в папке %ProgramFiles%\GIMP-2.0\share\gimp\2.0\scripts, а под Linux – в /usr/local/share/gimp/2.0/scripts. Вы можете использовать их как отправную точку при разработке собственных скриптов.

Сохраним наш первый скрипт с расширением scm, и поместим его в папку пользовательских скриптов. В Windows, пользовательские скрипты лежат в папке %USERPROFILE%\.gimp-2.6\scripts, в Linux – в папке ~/.gimp-2.6/scripts. Теперь надо перезапустить GIMP, или выполнить команду Фильтры -> Script-Fu -> Обновить Сценарии. Если в коде нет ошибок, наш скрипт будет виден в «просмотре процедур Script-Fu»:



Обратите внимание, здесь видны сведения об авторе, которые мы передали в script-fu-register. Можете воспользоваться этой возможностью, чтобы пользователи знали кому говорить спасибо, или передать пустые строки и сохранить инкогнито.

Выполнить скрипт можно через меню “Фильтры -> Мои скрипты”:



Для удобства вызова можно назначить подходящую клавиатурную команду. Стоит отметить, что GIMP поддерживает динамические шоткаты – достаточно нажать желаемый «аккорд» когда указатель находится над требуемым пунктом меню, и настройка будет сохранена. По умолчанию эта полезная функция отключена, ее можно включить в настройках в разделе «Интерфейс».

Скрипт «Быстрая тень» предполагает, что он вызывается для скриншота окна, обрезанного по рамке. Такое изображение можно получить, нажав Alt+PrtScr, или используя специализированный софт для захвата скриншотов, например SnagIt. Ниже приведен скриншот окна, обработанный «быстрой тенью»:



Всё бы хорошо, но скруглённые уголки окна, под которыми остался непрозрачный фон, портят картину. К сожалению, нам не попадалось утилит для захвата скриншотов, которые умеют оставлять прозрачность под уголками (может быть, читатель что-то посоветует). Поэтому в качестве обходного манёвра используем следующий скрипт:

(define (script-fu-cut-corners 	image 
				drawable
				radius
				only-top)
	(gimp-context-push)
	(gimp-image-set-active-layer image drawable)
	(gimp-image-undo-group-start image)

	; Добавляем альфа-канал (прозрачность)
	(gimp-layer-add-alpha drawable)
	; Выделяем все изображение, cкругляем уголки выделения
	(gimp-round-rect-select image 0 0 (car (gimp-image-width image))
		        (car (gimp-image-height image)) 
			radius radius CHANNEL-OP-REPLACE TRUE FALSE 0 0)
	; Инвертируем выделение
	(gimp-selection-invert image)
	; Если требуется подрезать только верхние уголки...
	(if (= only-top TRUE)
		; ...то вычитаем из выделения область изображения
		; охватывающую оба нижних уголка
		(gimp-rect-select image 
				0
				(- (car (gimp-image-height image)) radius) 
				(car (gimp-image-width image)) 
				radius 
				CHANNEL-OP-SUBTRACT 
				FALSE 
				0))
	; Удаляем выделенные области
	(gimp-edit-clear drawable)
	; Снимаем выделение
	(gimp-selection-none image)
	
	(gimp-image-undo-group-end image)
	(gimp-displays-flush)
	(gimp-context-pop)
)

(script-fu-register "script-fu-cut-corners"
	"Подрезать уголки"
	"Подрезать скругленные уголки скриншота окна."
	"Василий Пупкин <pupkin@example.com>"
	"ООО Рога и Копыта"
	"2010/10/6"
	"RGB*"
	SF-IMAGE      	"Image"                   	0
	SF-DRAWABLE   	"Drawable"                	0
	SF-ADJUSTMENT 	"Радиус (0 - 20 пикселей)"	'(8 0 20 1 10 0 0)
	SF-TOGGLE	  	"Только верхние"		FALSE
	
)

(script-fu-menu-register "script-fu-cut-corners"
                         "<Image>/Filters/Мои скрипты")


Этот скрипт запрашивает параметры у пользователя. Во-первых, нужно указать радиус скругления уголков. Для дефолтной темы Windows 7 подходит значение 8 точек, в Vista радиус поменьше. Во-вторых, для некоторых тем может пригодиться опция – подрезать только верхние уголки.



Ниже приведён результат последовательного запуска скриптов “Подрезать уголки” и “Быстрая тень”:



Уже выглядит лучше, можно вставлять в документацию или на сайт.

В нашей следующей статье по GIMP мы рассмотрим, как красиво оформить скриншот фрагмента окна. Например, вот так:



Продолжение — здесь.
Tags:
Hubs:
Total votes 124: ↑119 and ↓5+114
Comments40

Articles

Information

Website
www.developersoft.ru
Registered
Founded
1998
Employees
201–500 employees
Location
Россия