Jdi na navigaci předmětu

PGA - GIMP → Krita: migrační tahák (pro cvičení s pluginy)

PGA - GIMP → Krita: migrační tahák (pro cvičení s pluginy)

Autor kurzu: Šimon Taněv, Zdeněk Nejedlý, Radek Richtr

Cíl: zachovat didaktickou kostru GIMP cvičení (GUI, preview, blokové operace) a převést ji do PyKrita (Qt), s důrazem na BGRA, ROI (výběr) a bezpečný refresh.

Crosswalk (GIMP ↔ Krita)

GIMP (Python-fu)Krita (PyKrita)Poznámky
gimpplugin.plugin registracekrita.Extension + createActions()Akci vlož do tools/scripts, napoj triggered.connect(…​). :contentReference[oaicite:0]{index=0}
gimpui/gtk dialogyPyQt5 (QtWidgets)Dialogy, layouty, signály; stejné UX, jiná API. :contentReference[oaicite:1]{index=1}
Shelf (gimpshelf) perzistenceQSettings / JSON souborUkládej presety, last-used hodnoty. :contentReference[oaicite:2]{index=2}
drawable.get_pixel_rgn(…​)node.pixelData(x,y,w,h) / setPixelData(…​)Práce s BGRA bytearray/memoryview; řádkově/blokově. :contentReference[oaicite:3]{index=3}
RUN_* módyneřeší seInteraktivní běh přes akci v menu. :contentReference[oaicite:4]{index=4}
Preview: dočasná vrstvaPreview: dočasná kopie vrstvyVytvoř kopii/ROI, po OK aplikuj do cíle. :contentReference[oaicite:5]{index=5}
Progress bar gimp.progress_*QProgressDialog / jednoduchý statusPrůběžně volat QApplication.processEvents(). :contentReference[oaicite:6]{index=6}

Lab K-11: Hue-Map (přemapování odstínu přechodem) — Krita verze

Inspirace: GIMP „Hue Map“ ukázka (GUI, preview, blokové operace). :contentReference[oaicite:8]{index=8}

Cíl
  • GUI s ColorRamp (náhrada: vlastní 256-bodový LUT), Preview na ROI, aplikace do vrstvy (BGRA).
Postup (stručně)
  1. Akce „Hue Map (Krita)“ do Tools/Scripts.
  2. Dialog (Qt): Slider „Hue Shift“ (–180..+180), „Strength“ (0..1), tlačítko Preview, OK, Cancel.
  3. Preview: zkopíruj ROI do dočasné vrstvy, převeď BGR→HSV, přemapuj H (otočení + LUT), zpět do BGR; alfu ponech.
  4. OK: zpracuj cílovou vrstvu v ROI; doc.refreshProjection().
Ukázka 1. Kostra kódu (výňatek, BGRA + HSV)
data = bytearray(node.pixelData(x, y, w, h))
mv = memoryview(data)
for i in range(0, len(mv), 4):
    b,g,r,a = mv[i+0], mv[i+1], mv[i+2], mv[i+3]
    # BGR -> HSV (rychlá integer approx. nebo QColor)
    h,s,v = rgb_to_hsv_i(r,g,b)
    h = (h + hue_shift_deg) % 360
    r,g,b = hsv_to_rgb_i(h, s, v)
    mv[i+0], mv[i+1], mv[i+2] = b,g,r
node.setPixelData(mv.tobytes(), x, y, w, h)
doc.refreshProjection()
Checklist
  • Náhled neovlivní zdrojovou vrstvu
  • Alfa beze změny
  • ROI pouze dle výběru
Bonus
  • QSettings pro uložení posledních hodnot; slider „LUT smoothness“.

Lab K-11b: Pixelizace (bloková) — Krita verze

Inspirace: „Samostatná práce: pixelizace“ (definované okolí → nová hodnota). :contentReference[oaicite:9]{index=9}

Cíl
  • Parametr blockSize (např. 4–32 px); průměr barvy v bloku → vyplnit blok; BGRA, bez zásahu do A.
Postup
  1. Rozděl ROI na mřížku blockSize.
  2. Načti podblok (řádkově), spočítej průměr B,G,R, alfu ponech.
  3. Vyplň blok průměrem a zapiš zpět; po řádcích kvůli paměti.
Poznámky
  • Výběr mimo celočíselné násobky blockSize ořež na nejbližší hranici.

Lab K-09: Posun kanálů (RGB/Gray) — Krita verze

Inspirace: GIMP #09 „posunutí kanálů“ s UI a dvěma variantami. :contentReference[oaicite:10]{index=10}

Cíl
  • Tři slidery ΔR/ΔG/ΔB (–255..+255), přepínač „Luminance only“.
Schéma výpočtu
  • RGB: c' = clamp(c + Δc), alfa beze změny.
  • Luminance only: Y = 0.2126 R + 0.7152 G + 0.0722 B → posunout Y, upravit RGB poměrově.

UX a výkon (doporučení)

  • Preview dělej na downsample kopii ROI (např. 256×256) a teprve OK na plné velikosti. :contentReference[oaicite:11]{index=11}
  • QProgressDialog při dlouhých operacích; každých pár řádků processEvents(). :contentReference[oaicite:12]{index=12}
  • Perzistence: QSettings (org="fit.cvut.cz", app="pga-krita") nebo JSON v plugin složce.