BI-PGA Programování grafických aplikací
Jdi na navigaci předmětu

3. Zásuvné moduly pro GIMP (Python)

Cíl cvičení

Cílem cvičení je demonstrovat tvorbu zásuvného modulu do aplikace GIMP s využitím jazyka Python

Osnova

  • Instalace vývojového prostředí a nástrojů
  • Zdroje a příklady
  • Ukázkové příklady

Vývojové prostředí

OS Linux a OS Windows

  • v principu je potřeba jen textový editor
  • není potřeba kompilovat

Zdroje a příklady

GIMP Python Documentation

Beginning GIMP: From Novice to Professional

Gimp-Python

Objektový přístup

class filter_plugin(gimpplugin.plugin):

    def start(self):
        gimp.main(self.init, self.quit, self.query, self._run)

    def init(self):
        pass

    def quit(self):
        pass

    def query(self):
        gimp.install_procedure(
            "filter_plugin_main",
            "Popis ..",
            "Help ..",
            "Jiří Chludil",
            "Jiří Chludil",
            "2020",
            "<Image>/Filters/My filter",
            "RGB*, GRAY*",
            PLUGIN,
            [  # next three parameters are common for all scripts that are inherited from gimpplugin.plugin
                (PDB_INT32, "run_mode", "Run mode"),
                (PDB_IMAGE, "image", "Input image"),
                (PDB_DRAWABLE, "drawable", "Input drawable"),
            ],
            []
        )

    def filter_plugin_main(self, run_mode, image, drawable):
        ...


if __name__ == '__main__':
    color_filter_plugin().start()

GUI - vlastní design

def create_dialog(self):
    self.dialog = gimpui.Dialog("filter", "filters_dialog")

    # 3x9 non-homogenous table
    self.table = gtk.Table(9, 3, True)
    self.table.set_row_spacings(10)
    self.table.set_col_spacings(10)
    self.table.show()

    # checkbox
    self.myCheck = gtk.CheckButton("Active")
    self.myCheck.show()
    self.myCheck.connect("clicked",self.checkboxClicked)
    self.table.attach(self.yCheck, 1, 2, 0, 1)

    # adjustment
    self.myAdj = gtk.Adjustment(0.0, -255.0, 255.0, 1.0, 1.0, 0)
    self.myAdjScale = gtk.HScale(self.myAdj)
    self.myAdjScale.set_digits(0)
    self.myAdjScale.set_value(0)
    self.myAdjScale.connect("value_changed", self.adjScaleChangeValue)
    self.table.attach(self.myAdjScale, 2, 3, 1, 2)

   ...
def checkboxClicked(self,widget):
   ...
def radiusChangeValue(self,widget):
   ...

Demonstrace

Zadání

Vytvořte modul posunutí kanálů, který provede posun (přičtení parametru) všech obrazových kanálů. Modul bude mít nastavitelné parametr určující posunutí hodnoty všech kanálu a bude fungovat pro režimy RGB* a GRAY*

zdroj

Řešení

Samostatná práce

Zadání

Vytvořte modul posunutí kanálů, který provede posun (přičtení parametru) jednotlivých obrazových kanálů. Modul bude mít nastavitelné parametry určující posunutí hodnoty jednotlivých kanálu a bude fungovat pro režimy RGB* a GRAY*

Řešení