Gimp
Artykuł został umieszczony na liście 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'](parametry)
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
Kategoria: Zalążki artykułów, Python
fajny temat na artykuł :) Na polskich stronkach ciężko coś znaleść, a tu proszę. Dobra robota, Pozdrawiam