GIMP/Programowanie: Różnice pomiędzy wersjami
Linia 66: | Linia 66: | ||
Dodatki mogą być w : |
Dodatki mogą być w : |
||
* c ( skompilowane , czyli wtyczki) <ref>[http://www.gimp.org/docs/plug-in/plug-in.html Gimp plug-in by Kevin Turner]</ref> |
* [[c]] ( skompilowane , czyli wtyczki) <ref>[http://www.gimp.org/docs/plug-in/plug-in.html Gimp plug-in by Kevin Turner]</ref> |
||
* perl ( nieskompilowane, czyli skrypty, nie jest instalowany domyślnie)<ref>[http://www.gimp.org/tutorials/Basic_Perl/ Gimp doc : Basic Perl]</ref><ref>[http://imagic.weizmann.ac.il/~dov/gimp/perl-tut-2.0/ updated Gimp doc for ver. 2.0 - perl ]</ref><ref>[http://www.gimp.org/tutorials/Perl-Debugged/ Gimp tutorial : Perl Debugged]</ref> |
* [[perl]] ( nieskompilowane, czyli skrypty, nie jest instalowany domyślnie)<ref>[http://www.gimp.org/tutorials/Basic_Perl/ Gimp doc : Basic Perl]</ref><ref>[http://imagic.weizmann.ac.il/~dov/gimp/perl-tut-2.0/ updated Gimp doc for ver. 2.0 - perl ]</ref><ref>[http://www.gimp.org/tutorials/Perl-Debugged/ Gimp tutorial : Perl Debugged]</ref> |
||
* |
* [[python]] ( rozszerzenie py, mimo że są to skrypty to wymagają kompilacji)<ref>[http://www.gimp.org/docs/python/index.html gimp python doc]</ref> |
||
* scheme (nieskompilowane, czyli skrypty) rozszerzenie scm dla Script-Fu <ref>[http://www.home.unix-ag.org/simon/gimp/guadec2002/gimp-plugin/html/ Script-Fu and plug-ins for The GIMP by Simon Budig]</ref><ref>[http://docs.gimp.org/2.2/en/gimp-using-script-fu-tutorial-first-script.html gimp-using-script-fu-tutorial-first-script at User Manual]</ref> |
* scheme (nieskompilowane, czyli skrypty) rozszerzenie scm dla Script-Fu <ref>[http://www.home.unix-ag.org/simon/gimp/guadec2002/gimp-plugin/html/ Script-Fu and plug-ins for The GIMP by Simon Budig]</ref><ref>[http://docs.gimp.org/2.2/en/gimp-using-script-fu-tutorial-first-script.html gimp-using-script-fu-tutorial-first-script at User Manual]</ref> |
||
* Tcl ( nieskompilowane, czyli skrypty, nie jest instalowany domyślnie) |
* Tcl ( nieskompilowane, czyli skrypty, nie jest instalowany domyślnie) |
Wersja z 09:20, 22 maj 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 ( ang. 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]
Porównanie skryptów Gimpa i Photosopa
Skrypty GIMP są podobne do Photoshop "Actions" w tym że mogą automatyzować powtarzalne czynności ale różnią się w kilku szczegółach :
- Photoshop actions mogą być nagrywane przez użytkownika, skrypty GIMP-a nie .
- Photoshop actions are always in the same place and are clearly marked as actions.
- GIMP scripts can be placed anywhere and can be made to appear as if they are a new function.
- Photoshop actions use absolute values (eg select 2000 x 3000 pixels, no matter how large the image is)
- GIMP scripts can calculate variables based on the image attributes. (eg start at 1/3 down the image and select the second third)
- GIMP scripts can check attributes of the image and halt or display messages when certain conditions are met or not met.
Podsumowując tworzenie skryptów GIMP-a jest bardziej złożone niż PS actions ale jednocześnie mają one większe możliwości są bardziej elastyczne.[10]
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 czyli wtyczki lub rozszerzenia
- nieskompilowane czyli skrypty
- 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 :
- c ( skompilowane , czyli wtyczki) [13]
- perl ( nieskompilowane, czyli skrypty, nie jest instalowany domyślnie)[14][15][16]
- python ( rozszerzenie py, mimo że są to skrypty to wymagają kompilacji)[17]
- scheme (nieskompilowane, czyli skrypty) rozszerzenie scm dla Script-Fu [18][19]
- 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 [20]
Script-Fu jest to wtyczka do gimpa pozwalająca uruchamiać skrypty w TinyScheme [21]
Jest to również języki makr ( ang. macro language) oparty na Scheme.
Funkcje :
- script-fu-register
- script-fu-menu-register
są zdefiniowane w procedurze ts_init_procedures() w pliku plug-ins/script-fu/scheme-wrapper.c Dzięki temu plikowi skrypty mogą być używane w obrębie Gimpa.
Interpertator Skryptów ( ang. Script Interpreter ) który parsuje i uruchamia kod w Scheme jest to TinyScheme składnik wtyczki Script-Fu. Jest on zlokalizowany w katalogu tinyscheme : plug-ins/script-fu.
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 :[22]
(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)")
wyświetlić obraz :
(gimp-display-new image)
Tutaj możesz również sprawdzić działanie skryptu.
Katalog
Linux : Twoje skrypty są zapisane w twoim lokalnym katalogu skryptów :
~/.gimp-2.6/scripts/
lub ogólniej :
~/.gimp-[Numer wersji]/scripts/
albo w katalogu globalnym :
/usr/share/gimp/2.0/scripts
Windows : User:
C:\Documents and settings\<username>\.gimp-2.2\scripts
Global:
C:\Program Files\GIMP-2.0\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 [23]
Zawartość skryptu
Wzorce skryptu :
- Wzorzec nr 1 skryptu
- wzorzec demo.scm , który nic nie robi :[24]
(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ć:[25]
- 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 : [26]
(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 [27]
(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 :[28][29]
(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 :[30]
(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 [31]
- z innego skryptu[32]
Python
Dokumentacja [33]
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 [34][35][36]
Zapisujemy w lokalnym ( prywatnym) katalogu wtyczek :
~/.gimp-2.6/plug-ins
lub ogólniej :
~/.gimp-[Numer wersji]/plug-ins/
Kompilujemy :
gimptool --install plugin.c
lub
gimptool --install-admin plugin.c
Przykładowy wtyczek :
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
- ↑ gimp-scripts at Open Source Photography
- ↑ A repository of extensions for GIMP
- ↑ Script-FU by René Nyffenegger
- ↑ Gimp plug-in by Kevin Turner
- ↑ Gimp doc : Basic Perl
- ↑ updated Gimp doc for ver. 2.0 - perl
- ↑ Gimp tutorial : Perl Debugged
- ↑ gimp python doc
- ↑ Script-Fu and plug-ins for The GIMP by Simon Budig
- ↑ gimp-using-script-fu-tutorial-first-script at User Manual
- ↑ 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