GIMP/Programowanie: Różnice pomiędzy wersjami

Z Wikibooks, biblioteki wolnych podręczników.
Usunięta treść Dodana treść
Linia 5: Linia 5:
W gimpie możemy wyróżnić ( z punktu widzenie programisty) 3 główne składniki :
W gimpie możemy wyróżnić ( z punktu widzenie programisty) 3 główne składniki :
* jądro ( core)
* jądro ( core)
* bazę procedur : PDB ( ang. Procedural database )
* bazę procedur : PDB ( ang. Procedural database )<ref>[http://git.gnome.org/browse/gimp/tree/tools/pdbgen pdbgen source]</ref>
* wtyczkę
* wtyczkę



Wersja z 21:04, 17 kwi 2011

Opracowane na podstawie GIMP 2.6.8 wersja polska /linux

Architektura gimpa

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]
  • wtyczkę

Wtyczka wpływa na działanie gimpa poprzez PDB [2]

Dokładna architektura jest bardziej skomplikowana[3]

API

  • GIMP Library ( libgimp) Reference Manual[4]
  • GEGL [5]

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]

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 wtyczek

Szukaj w

  • rejestrze wtyczek [10]
  • przykłady René Nyffeneggera [11]

Podział wtyczek

Wtyczki 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

Wtyczki mogą być w :

  • pythonie ( rozszerzenie py, skompilowane)
  • scheme ( rozszerzenie scm , nieskompilowane, czyli skrypty), domyślnie instalowany[12][13]
  • c[14]
  • perl ( nieskompilowane, czyli skrypty, nie jest instalowany domyślnie)[15][16][17]
  • 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).

TinyScheme jest to wersja języka Scheme zgodna ze standardem R5RS. Tak jest od wersji 2.4 Gimpa, wcześniej była używana wersja SIOD języka Scheme.[18]

Script-Fu jest to oparty na Scheme ( tutaj w wersji TinyScheme) język ( ang. macro language).


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 :[19]

(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 [20]

Zawartość skryptu

Wzorce skryptu :

(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ć:[22]

  • definicję głównej funkcji ( opisującej jego działanie )
  • wywołanie jednej z par funkcji ( w celu rejestracji skryptu w gimpie ):
    • script-fu-register i script-fu-menu-register
    • tiny-fu-register i tiny-fu-menu-register

Każdy skrypt może zawierać:

  • wywołanie innego skryptu
  • wywołanie innej wtyczki


Definicje funkcji

Opis funkcji script-fu-register : [23]

(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 [24]

(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 :[25][26]
(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 :[27]

(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 [28]
  • z innego skryptu[29]

Python

Dokumentacja [30]

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ć pierwszy skrypt w c [31][32][33]

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

  1. pdbgen source
  2. How to write a GIMP plug-in Written By Dave Neary
  3. Earl Oliver, Jaime Ruiz, Steven She, and Jun Wang, The Software Architecture of the GIMP, December 2006.
  4. GIMP Library Reference Manual for GIMP 2.6.0
  5. GEGL
  6. van Gumster J, Shimonski Robert : GIMP Bible. John Wiley and Sons 2009, stron = 722 -04-16 | isbn = 978-0470523971
  7. Browse gimp code online
  8. Skrypty w gimpie - dokumentacja
  9. debug-plug-ins by
  10. A repository of extensions for GIMP
  11. Script-FU by René Nyffenegger
  12. Script-Fu and plug-ins for The GIMP by Simon Budig
  13. gimp-using-script-fu-tutorial-first-script at User Manual
  14. Gimp plug-in by Kevin Turner
  15. Gimp doc : Basic Perl
  16. updated Gimp doc for ver. 2.0 - perl
  17. Gimp tutorial : Perl Debugged
  18. SCRIPT-FU IN GIMP 2.4
  19. Generating GIMP Images with Script-Fu by Glimmer Labs
  20. GIMP Script-Fu Notes: JamCam Cleanup Plugins Submitted by johnk
  21. GIMP Script-Fu Notes: JamCam Cleanup Plugins Submitted by johnk
  22. Your First Script-Fu Script - gimp docs
  23. Opis script_fu_register - René Nyffenegger
  24. commit d4120fe1ab54812a805d920e5c5ca695ab60b956 : Updated all scripts to use script-fu-menu-register and pass just the menu by Kevin Cozens 2004-11-22
  25. gimp-plugin-menu-register at GIMP Library Reference Manual
  26. A Scheme Tutorial for Gimp Users Updated for Gimp-1.2 by Dov Grobgeld
  27. A Scheme Tutorial for Gimp Users Updated for Gimp-1.2 by Dov Grobgeld
  28. Basic Batch at Gimp doc
  29. Script-Fu Questions by Miles O'Neal
  30. Gimp Python Documentation James Henstridge
  31. Jak utworzyć skrypt w c
  32. How to write a GIMP plug-in in C
  33. GIMP Application Reference Manual Next Part XIII. Plug-Ins