Gimp

Dryobates
Artykuł został umieszczony na liście [[Zalazki artykulow|Zalążków artykułów]]. Jeżeli możesz rozbuduj go!
Gimp umożliwia pisanie skryptów w języku python. Dzięki bibliotece funkcji, można dostać się praktycznie do każdej operacji jaka jest możliwa do wykonania w gimpie. Również do innych skryptów. Ponadto mamy pełen dostęp do biblioteki pythona. Wykorzystując pythona możemy wzbogacić gimpa o nowe efekty z możliwością konfigurowania ich parametrów w oknach dialogowych. Możemy również zautomatyzować sobie pracę automatycznie przycinając obraz i generując kod html lub innych. Możemy wreszcie wykorzystać gimpa do przetworzenia dużej ilości obrazów automatycznie, nawet nie uruchamiając jego okien.

Dokładna dokumentacja gimpfu znajduje się na stronie gimp-a. Jedyne czego potrzeba do uruchomienia pythona w gimpie jest posiadanie zainstalowanego pythona i gimpa skompilowanego z jego obsługą.

Przetwarzanie wsadowe

Załóżmy, że mamy kilkaset plików jpg i chcemy je wszystkie przeskalować, aby miały szerokość 800px i zachować proporcje. Możemy do tego wykorzystać gimp-a.

Aby mieć dostęp do funkcji gimp-a należy zaimportować moduł gimpfu:

from gimpfu import *

Dostęp do funkcji gimpa mamy przez bazę procedur: pdb. Uruchamiając gimp-a w menu Dodatki mamy Przeglądarkę procedur, za pomocą której możemy znaleźć opis i parametry procedur. Procedurę możemy wywołać w postaci pdb.nazwa_procedury(parametry) lub pdb'nazwa-procedury'

Tworząc nasz skrypt również powinniśmy dopisać się do tej bazy. Robimy to wywołując funkcję register.

register(
  "kkk_scale", "", "", "Dryobates", "copyleft", "2006",
    "<Toolbox>/Xtns/Python-Fu/Moje/_KKK Scale", "",
  [
  (PF_STRING, "pattern", "File pattern", ""),
  (PF_INT, "new_width", "New width", ""),
  (PF_INT, "new_height", "New height", ""),
  ],
  [],
  kkk_scale
  )

Poszczególne parametry procedury to:

  • nazwa - kkk_scale
  • krótki opis
  • szczegółowy opis
  • autor - Dryobates
  • copyright - copyleft
  • data - 2006
  • ścieżka do menu - ten skrypt będzie widoczny w głównym oknie gimpa <Toolbox> w menu Dodatki/Python-Fu/Moje. Jeżeli chcemy by pojawiło się w oknie obrazu należy ścieżkę rozpocząć od <Image>.
  • typ obrazu - nie mam pojęcia co to jest, ale zawsze zostawiam puste i działa (TODO: znaleźć odpowiedź)
  • parametry procedury - parametry to lista krotek (typ, nazwa, opis w bazie, wartość domyslna)
  • wynik funkcji - w naszym przypadku nic nie zwraca. To również lista krotek, lecz postaci: (typ, nazwa, opis w bazie)
  • ostatni parametr to funkcja którą rejestrujemy

Ustaliliśmy, że funkcja nazywać będzie się kkk_scale i będzie przyjmować 3 parametry. Pierwszy to łańcuch znaków, a dwa kolejne to liczby.

A oto cały kod:

#! /usr/bin/env python
from os import getcwd
from os.path import join
from glob import glob
from gimpfu import *


def kkk_scale(pattern, new_width, new_height):
    """ Przeskalowuje wszystkie pliki pasujace do wzorca"""
    # pobieramy wszystkie pliki pasujace do wzorca
    files = glob(join(getcwd(), pattern))
    # dla kazdego pliku
    for filename in files:
	# wczytujemy plik
	image = pdb.gimp_file_load(filename, filename);
	# pobieramy aktywna (i jedyna) warstwe, ktora bedziemy edytowac
	drawable = pdb.gimp_image_get_active_layer(image)
	# pobieramy rozmiary
	width = pdb.gimp_drawable_width(drawable)
	height = pdb.gimp_drawable_height(drawable)
	# bedziemy skalowac wzgledem wiekszego rozmiaru
	if width > height:
	    n_width = new_width
	    n_height = height*new_width/width
	else:
	    n_height = new_height
	    n_width = width*new_height/height
	# skalujemy
	pdb.gimp_drawable_transform_scale_default(drawable, 0, 0, n_width, n_height, 2, 0)
	# zapisujemy plik
	pdb.gimp_file_save(image, drawable, filename, filename)
	# usuwamy plik z pamieci
	pdb.gimp_image_delete(image)

register(
  "kkk_scale", "", "", "Dryobates", "copyleft", "2006",
    "<Toolbox>/Xtns/Python-Fu/Moje/_KKK Scale", "",
  [
  (PF_STRING, "pattern", "File pattern", ""),
  (PF_INT, "new_width", "New width", ""),
  (PF_INT, "new_height", "New height", ""),
  ],
  [],
  kkk_scale
  )

main()

Na koniec wywołujemy funkcję main z gimpfu. Ona wykonuje całe zadanie.

Aby uruchomić nasz skrypt należy go zapisać w katalogu gimp-a (w systemach uniksowych w katalogu domowym .gimpXYZ) w podkatalogu plug-ins.

Przykładowe wywołanie z linii poleceń:
gimp -i -b '(python-fu-kkk-scale RUN-NONINTERACTIVE "*jpg" 200 100)' '(gimp-quit 0)'

Do wykonania funkcji użylismy domyślnego interpretera script-fu. Stąd te polecenia w nawiasach.

'python-fu-kkk-scale' to nazwa naszej funkcji (podkreślenia zostały zamienione na myślniki i dodany został typ skryptu python-fu).

Kolejny parametr to RUN-NONINTERACTIVE. Do każdego skryptu możemy przekazać RUN-NONINTERACTIVE lub RUN-INTERACTIVE w zależności, czy chcemy by pojawił się interfejs graficzny gimp-a (oczywiście w naszym przypadku okienka są zbędne).

Następne to już parametry do naszego skryptu oddzielone spacjami.

Na koniec opuszczamy gimp-a.

Filtr z oknem z parametrami

2 komentarzy

Świetny artykuł, na pewno się przyda.

fajny temat na artykuł :) Na polskich stronkach ciężko coś znaleść, a tu proszę. Dobra robota, Pozdrawiam