GIMP/Programowanie: Różnice pomiędzy wersjami
Linia 33: | Linia 33: | ||
* wtyczki mogą nie działać w innej wersji gimpa niż tej dla której zostały utworzone. Dokumentacji nie ma ( jest przestarzała). Informacji trzeba szukać w kodzie źródłowym ( po angielsku) |
* wtyczki mogą nie działać w innej wersji gimpa niż tej dla której zostały utworzone. Dokumentacji nie ma ( jest przestarzała). Informacji trzeba szukać w kodzie źródłowym ( po angielsku) |
||
==Źródła |
==Źródła == |
||
Szukaj w |
Szukaj w |
||
* rejestrze wtyczek <ref>[http://registry.gimp.org/ A repository of extensions for GIMP]</ref> |
* rejestrze wtyczek <ref>[http://registry.gimp.org/ A repository of extensions for GIMP]</ref> |
Wersja z 08:31, 20 kwi 2011
Opracowane na podstawie GIMP 2.6.8 wersja polska /linux
Architektura gimpa
W gimpie możemy wyróżnić ( z punktu widzenie programisty) 3 główne składniki :
- jądro ( core)
- bazę procedur : PDB ( ang. Procedural database )[1]
- wtyczki, rozszerzenia i skrypty
Wtyczka wpływa na działanie gimpa poprzez PDB [2]
Dokładna architektura jest bardziej skomplikowana[3]
API
Wtyczki ( ang. plugin), rozszerzenia, skrypty
Gimp jest dużym programem. Ma ponad 600 000 linii kodu w około 2 600 plikach.[6] Łatwiej dodać nową funkcję poprzez napisanie wtyczki, niż poprzez modyfikację kodu.[7] Wiele wartościowych wtyczek ma 100-200 linii kodu ( np. w C )[8]
Dodatkowe funkcje w gimpie można realizować poprzez :
- wtyczki (ang. plugin) : osobny proces wywoływany przez rdzeń gimpa , kod źródłowy wymaga kompilacji, zmieniają obrazy
- rozszerzenia (ang. extension) : osobny proces, kod źródłowy wymaga kompilacji, nie zmieniają obrazów
- skrypty (ang. script ) : nie wymaga kompilacji, zmienia obraz
Działanie wtyczek można sprawdzić za pomocą funkcji GIMP_PLUGIN_DEBUG[9]
Ostrzeżenie
- Uwaga : wtyczki mogą bardzo dużo ( np. udostępnić twój system dla innych osób bez twojej wiedzy) dlatego instaluj tylko wtyczki z zaufanego źródła
- wtyczki mogą nie działać w innej wersji gimpa niż tej dla której zostały utworzone. Dokumentacji nie ma ( jest przestarzała). Informacji trzeba szukać w kodzie źródłowym ( po angielsku)
Źródła
Szukaj w
Podział dodatków
Dodatki możemy podzielić wg :
- języka programowania w którym zostały napisane
- kompilacji ( skompilowane, nieskompilowane)
- złożoności wtyczki
- jeden plik
- wiele plików ( osobny katalog)
- operujące :
- globalnie ( nie związane z konkretnym obrazem)
- operujące na konkretnym obrazie
Języki programowanie
Dodatki mogą być w :
- pythonie ( rozszerzenie py, skompilowane)[12]
- scheme (nieskompilowane, czyli skrypty) rozszerzenie scm dla Script-Fu [13][14]
- c[15]
- perl ( nieskompilowane, czyli skrypty, nie jest instalowany domyślnie)[16][17][18]
- Tcl ( nieskompilowane, czyli skrypty, nie jest instalowany domyślnie)
Scheme
Scheme jest to język programowanie ( odmiana Lispa). W gimpie jest jednym z 2 głównych języków skryptowym ( domyślnie instalowanych). Wersje :
- TinyScheme jest to wersja języka Scheme zgodna ze standardem R5RS. Tak jest od wersji 2.4 Gimpa,
- SIOD [19]
Script-Fu jest to wtyczka do gimpa pozwalająca uruchamiać skrypty w TinyScheme [20]
Jest to również języki makr ( ang. macro language) oparty na Scheme.
Konsola
Możesz otworzyć konsolę za pomocą menu głównego : Menu/Filtry/Script-Fu/Konsola
Witamy w TinyScheme Copyright (c) Dimitrios Souflis Konsola Script-Fu - Rozwój interaktywny schematu
Teraz można wprowadzać polecenia w języku Scheme, a dokładniej w jego odmianie TinyScheme.
Na przykład dodać 3 i 5 :
(+ 3 5)
lub pozdrowić świat :
(gimp-message "Hello World")
utworzyć nowy obraz :[21]
(define width 256) (define height 384) (define image (car (gimp-image-new width height 0)))
utworzyć nową warstwę :
(define layer (car (gimp-layer-new image width height 0 "Layer" 100 0)))
dodać warstwę do obrazu :
(gimp-image-add-layer image layer 0)
wyświetlić nowy obraz :
(gimp-display-new image)
wyczyścić obraz na kilka sposobów :
(gimp-selection-all image) ; Select everything (gimp-edit-clear layer) ; Do "Clear" from the "Edit" menu (gimp-selection-none image) ; Select nothing
wybrać kolory :
(gimp-palette-set-background (list 255 255 255)) ; białe tło (gimp-palette-set-foreground (list 0 0 255)) ;
wybrać pędzel :
(gimp-brushes-set-brush "Circle (03)")
(gimp-display-new image)
Tutaj możesz również sprawdzić działanie skryptu.
Katalog
Twoje skrypty są zapisane w twoim lokalnym katalogu skryptów :
~/.gimp-2.6/scripts/
lub ogólniej :
~/.gimp-[Numer wersji]/scripts/
albo katalogu :
/usr/share/gimp/2.0/scripts
Tworzenie
Etapy tworzenia :
- utworzenie pliku z rozszerzeniem scm i odpowiednią zawartością
- zapisanie pliku w odpowiednim katalogu
- zarejestrować skrypt w gimpie
Nazwa skryptu
Nazwa skryptu powinna być:
script-fu-nazwa
ponieważ wtedy będzie dobrze widoczny w liście procedur [22]
Zawartość skryptu
Wzorce skryptu :
- Wzorzec nr 1 skryptu
- wzorzec demo.scm , który nic nie robi :[23]
(define (script-fu-demo image
drawable)
1)
(script-fu-register "script-fu-demo"
"_Demo..."
"Demo Plugin."
"John Kawakami "
"John Kawakami"
"8/28/2006"
"RGB*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0)
(script-fu-menu-register "script-fu-demo"
_"/Script-Fu/Demo")
Każdy skrypt musi zawierać:[24]
- definicję głównej funkcji ( opisującej jego działanie )
- wywołanie 2 funkcji ( w celu rejestracji skryptu w gimpie ): script-fu-register i script-fu-menu-register
Każdy skrypt może zawierać:
- wywołanie innego skryptu
- wywołanie innej wtyczki
Definicje funkcji
Opis funkcji script-fu-register : [25]
(script-fu-register name_of_function menu_label ; pass just the menu label in script-fu-register description author copyright date images_applyable [parameter [parameter...]] ) parameter SF-TYPE "description" "default value" SF-TYPE * SF-VALUE * SF-STRING * SF-FONT * SF-COLOR * SF-TOGGLE * SF-FILENAME * SF-PATTERN * SF-GRADIENT * SF-IMAGE together with SF-DRAWABLE * SF-DRAWABLE together with SF-IMAGE * SF-ADJUSTMENT
Dodawanie pozycji w menu :
Za pomocą funkcji script-fu-register dodajemy tylko etykietę menu [26]
(script-fu-register "script-fu-xach-effect"
_"_Xach-Effect..." ; pass just the menu label in script-fu-register
_"Add a subtle translucent 3D effect to the selected region (or alpha)"
"Adrian Likins <adrian@gimp.org>"
"Adrian Likins"
"9/28/97"
"RGB* GRAY*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT _"Highlight X offset" '(-1 -100 100 1 10 0 1)
SF-ADJUSTMENT _"Highlight Y offset" '(-1 -100 100 1 10 0 1)
SF-COLOR _"Highlight color" "white"
SF-ADJUSTMENT _"Highlight opacity" '(66 0 255 1 10 0 0)
SF-COLOR _"Drop shadow color" "black"
SF-ADJUSTMENT _"Drop shadow opacity" '(100 0 100 1 10 0 0)
SF-ADJUSTMENT _"Drop shadow blur radius" '(12 0 255 1 10 0 1)
SF-ADJUSTMENT _"Drop shadow X offset" '(5 0 255 1 10 0 1)
SF-ADJUSTMENT _"Drop shadow Y offset" '(5 0 255 1 10 0 1)
SF-TOGGLE _"Keep selection" TRUE
)
Za pomocą funkcji script-fu-menu-register dodajemy pozycję menu ( ang. menu-item) w postaci łańcucha zawierającego pełną ścieżkę i zaczynającego się od :
- <Image> dla menu lokalnego obrazu ( otwieranego prawym przyciskiem myszy
- <Toolbox>/Xtns/ dla menu głównego :[27][28]
(script-fu-menu-register "script-fu-xach-effect"
"<Image>/Filters/Light and Shadow/Shadow")
; nowa pozycja w menu głównym ( wersja ang)
; script which works on an already existing image
; the script will be available through the gimp menu that is launched by the right mouse button over an image : the popup image menu
; Such script must also have as their first and second argument a SF-IMAGE and a SF-DRAWABLE.
inny przykład :[29]
(script-fu-menu-register "uni-img"
"<Toolbox>/Xtns/Script-Fu/Tutorials")
; to create a new image that is independant of earlier images, then the script will be available
; through the gimp menu that is launched by the right mouse button over an image
; Such script must also have as their first and second argument a SF-IMAGE and a SF-DRAWABLE.
Rejestracja skryptu
- za pomocą menu : Menu/Filtry/Scipt-Fu/Odśwież skrypty
- automatycznie przy starcie gimpa
Możemy to sprawdzić za pomocą przeglądarki skryptów wywołanej z menu : Menu/Pomoc/Przeglądarka wtyczek
Uruchomienie skryptu
Skrypt możesz uruchomić :
- za pomocą menu głównego lub podręcznego ( jeśli tworzy własną pozycję w menu)
- z linii poleceń korzystając z trybu wsadowego gimpa [30]
- z innego skryptu[31]
Python
Dokumentacja [32]
Konsola
Możesz otworzyć konsolę za pomocą menu głównego : Menu/Filtry/Python-Fu/Console
GIMP 2.6.8 Python Console Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] >>>
Teraz można wprowadzać polecenia w języku Python.
C
Jak utworzyć pierwszą wtyczkę w c [33][34][35]
Zapisujemy w lokalnym ( prywatnym) katalogu :
~/.gimp-2.6/plug-ins
lub ogólniej :
~/.gimp-[Numer wersji]/plug-ins/
Kompilujemy :
gimptool --install plugin.c
lub
gimptool --install-admin plugin.c
Odnośniki
- ↑ pdbgen source
- ↑ How to write a GIMP plug-in Written By Dave Neary
- ↑ Earl Oliver, Jaime Ruiz, Steven She, and Jun Wang, The Software Architecture of the GIMP, December 2006.
- ↑ GIMP Library Reference Manual for GIMP 2.6.0
- ↑ GEGL
- ↑ van Gumster J, Shimonski Robert : GIMP Bible. John Wiley and Sons 2009, stron = 722 -04-16 | isbn = 978-0470523971
- ↑ Browse gimp code online
- ↑ Skrypty w gimpie - dokumentacja
- ↑ debug-plug-ins by
- ↑ A repository of extensions for GIMP
- ↑ Script-FU by René Nyffenegger
- ↑ gimp python doc
- ↑ Script-Fu and plug-ins for The GIMP by Simon Budig
- ↑ gimp-using-script-fu-tutorial-first-script at User Manual
- ↑ Gimp plug-in by Kevin Turner
- ↑ Gimp doc : Basic Perl
- ↑ updated Gimp doc for ver. 2.0 - perl
- ↑ Gimp tutorial : Perl Debugged
- ↑ SCRIPT-FU IN GIMP 2.4
- ↑ tiny-fu-faq
- ↑ Generating GIMP Images with Script-Fu by Glimmer Labs
- ↑ GIMP Script-Fu Notes: JamCam Cleanup Plugins Submitted by johnk
- ↑ GIMP Script-Fu Notes: JamCam Cleanup Plugins Submitted by johnk
- ↑ Your First Script-Fu Script - gimp docs
- ↑ Opis script_fu_register - René Nyffenegger
- ↑ commit d4120fe1ab54812a805d920e5c5ca695ab60b956 : Updated all scripts to use script-fu-menu-register and pass just the menu by Kevin Cozens 2004-11-22
- ↑ gimp-plugin-menu-register at GIMP Library Reference Manual
- ↑ A Scheme Tutorial for Gimp Users Updated for Gimp-1.2 by Dov Grobgeld
- ↑ A Scheme Tutorial for Gimp Users Updated for Gimp-1.2 by Dov Grobgeld
- ↑ Basic Batch at Gimp doc
- ↑ Script-Fu Questions by Miles O'Neal
- ↑ Gimp Python Documentation James Henstridge
- ↑ Jak utworzyć skrypt w c
- ↑ How to write a GIMP plug-in in C
- ↑ GIMP Application Reference Manual Next Part XIII. Plug-Ins