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

Z Wikibooks, biblioteki wolnych podręczników.
Usunięta treść Dodana treść
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 wtyczek==
==Ź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 07:31, 20 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]
  • wtyczki, rozszerzenia i skrypty

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]

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

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

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 :

(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

  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. gimp python doc
  13. Script-Fu and plug-ins for The GIMP by Simon Budig
  14. gimp-using-script-fu-tutorial-first-script at User Manual
  15. Gimp plug-in by Kevin Turner
  16. Gimp doc : Basic Perl
  17. updated Gimp doc for ver. 2.0 - perl
  18. Gimp tutorial : Perl Debugged
  19. SCRIPT-FU IN GIMP 2.4
  20. tiny-fu-faq
  21. Generating GIMP Images with Script-Fu by Glimmer Labs
  22. GIMP Script-Fu Notes: JamCam Cleanup Plugins Submitted by johnk
  23. GIMP Script-Fu Notes: JamCam Cleanup Plugins Submitted by johnk
  24. Your First Script-Fu Script - gimp docs
  25. Opis script_fu_register - René Nyffenegger
  26. commit d4120fe1ab54812a805d920e5c5ca695ab60b956 : Updated all scripts to use script-fu-menu-register and pass just the menu by Kevin Cozens 2004-11-22
  27. gimp-plugin-menu-register at GIMP Library Reference Manual
  28. A Scheme Tutorial for Gimp Users Updated for Gimp-1.2 by Dov Grobgeld
  29. A Scheme Tutorial for Gimp Users Updated for Gimp-1.2 by Dov Grobgeld
  30. Basic Batch at Gimp doc
  31. Script-Fu Questions by Miles O'Neal
  32. Gimp Python Documentation James Henstridge
  33. Jak utworzyć skrypt w c
  34. How to write a GIMP plug-in in C
  35. GIMP Application Reference Manual Next Part XIII. Plug-Ins