Gimp
Dryobates
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.
Świetny artykuł, na pewno się przyda.
fajny temat na artykuł :) Na polskich stronkach ciężko coś znaleść, a tu proszę. Dobra robota, Pozdrawiam