Pokaż wiadomości
|
|
Strony: [1]
|
|
1
|
Hyde zone / [Archiwum] Pomocna dłoń - GIMP / Odp: Skrypt do operacji na warstwach
|
: 24.08.2010, 20:19:09
|
|
Ziomioslaw dziękuję za pomoc. Wszystko fajnie zadziałało.
PS. Jeśli ktoś byłby zainteresowany to wrzucam swój skrypt, który na podstawie aktualnie załadowanego obrazu tworzy obrazek do przygotowany do zamieszczenia go na www. Skrypt skaluje i spłaszcza oryginalny obraz, zmienia jego rozdzielczosc, dodaje biały obszar naokoło obrazka oraz lekko go podostrza.
; Define the function:
(define (script-fu-obrazek-galerii-www inImage) (let ( (theImage 0) (theLayer 0) (theWidth 0) (theHeight 0) ) (gimp-image-undo-group-start inImage) (gimp-selection-all inImage) (set! theImage (car (gimp-image-duplicate inImage))) ;Splaszczenie warstw (set! theLayer (car (gimp-image-flatten theImage))) ;poczatek skalowania obrazka (define max-width 700) (define max-height 700)
(define image-width (car (gimp-image-width theImage))) (define image-height (car (gimp-image-height theImage)))
(if (< image-height image-width) (define scale-factor (/ image-width max-width)) (define scale-factor (/ image-height max-height)))
(define final-width (/ image-width scale-factor)) (define final-height (/ image-height scale-factor))
(gimp-image-set-resolution theImage 72 72) (gimp-image-scale theImage final-width final-height) ;koniec skalowania obrazka
;dodanie nowej warstwy (define white-color '(255 255 255)) (set! theWidth (+ 20 (car (gimp-image-width theImage)))) (set! theHeight (+ 20 (car (gimp-image-height theImage)))) (gimp-palette-set-foreground white-color) ; Utworz nowa warstwe (define new-layer (car (gimp-layer-new theImage theWidth theHeight RGB "layer 1" 100 NORMAL))) ; Nazwij warstwe (gimp-layer-set-name new-layer "warstwa-tla") ; dodaj nowa warstwe do obrazka (gimp-image-add-layer theImage new-layer 0) ;nowa wieksza warstwe umiesc na dole stosu (gimp-image-lower-layer theImage new-layer) ;nowa warstwa - wypelnij kolorem bialym ;(gimp-drawable-fill new-layer WHITE-FILL) ;Zwiekszanie obszaru roboczego do wielkosci warstwy - fit to canvas (gimp-image-resize-to-layers theImage) ;nowa warstwa - wypelnij kolorem bialym (gimp-drawable-fill new-layer WHITE-FILL) (gimp-image-set-active-layer theImage theLayer) ;koniec obslugi dodania nowej warstwy ;Srodkowanie warstw (define deltaX (- theWidth (car (gimp-drawable-width theLayer)))) (define deltaY (- theHeight(car (gimp-drawable-height theLayer)))) (define offX (/ deltaX 2)) (define offY (/ deltaY 2)) ;centrowanie warstw (gimp-layer-set-offsets theLayer offX offY) ;lekkie podostrzenie (plug-in-sharpen 1 theImage theLayer 5) (gimp-image-clean-all theImage) (gimp-display-new theImage) (gimp-selection-none inImage) (gimp-image-undo-group-end inImage) (gimp-displays-flush theImage) ) )
(script-fu-register "script-fu-obrazek-galerii-www" "Obrazek galerii WWW" "Tworzy obrazek do opublikowania na WWW" "mw" "mw" "2010" "RGB* GRAY*" SF-IMAGE "The image" 0 )
(script-fu-menu-register "script-fu-obrazek-galerii-www" "<Toolbox>/Xtns/Script-Fu")
|
|
|
|
|
2
|
Hyde zone / [Archiwum] Pomocna dłoń - GIMP / Odp: Skrypt do operacji na warstwach
|
: 22.08.2010, 09:07:18
|
|
Ziomioslaw serdecznie dziękuję za bardzo pomocną i rzeczową odpowiedź.
Zamianę warstw już sobie załatwiłem i nawet mi zadziałała.
Mam natomiast kilka nowych pytań odnośnie programowego operowania na warstwach,
1. Czy jeśli w obrazie programowo spłaszczę warstwy a następnie wywołam na nim operację (gimp-image-get-active-layer image) to czy dostanę tą właśnie jedyną istniejącą tam warstwę? Bo problem jest taki że przed dodaniem nowej warstwy potrzebuje przeczytać pewne atrybuty z tej starej a na początku mam referencję tylko do obrazka.
2. Jeśli opisany przeze mnie w punkcie 1 jest dobrym sposobem dostania się do warstwy, która już istnieje w obrazku to jak z tej warstwy wydostać parametry opisane przez Ciebie (takie jak jej rozmiar i położenie). Nie znalazłem funkcji które zwracałyby te wartości dla warstwy.
3. W jaki sposób nakazać warstwie przesunięcie się do określonej pozycji. Tutaj też nie udało mi się namierzyć funkcji której nazwa by wskazywała na coś takiego.
|
|
|
|
|
3
|
Hyde zone / [Archiwum] Pomocna dłoń - GIMP / [ROZ] Skrypt do operacji na warstwach
|
: 21.08.2010, 10:05:05
|
|
Witam
Piszę sobie skrypt który automatyzuje mi operacje na obrazku i napotkałem dwa problemy do których nie mogę znaleźć rozwiązania (ponieważ dopiero raczkuję w Scheme to obawiam się że mogą one być bardzo podstawowe )
Mianowicie chciałbym wykonać takie operacje:
1. spłaszcz obrazek 2. dodaj warstwe tła (o szerokości i wysokości większej niż warstwa obrazka) 3. odwróć kolejność warstw(nowa duża warstwa ma być na dole) 4. zwiększ wielkość obszaru roboczego 5. wyśrodkuj warstwy względem siebie (ma stworzyć się ramka wokół obrazka)
Nie za bardzo mogę poradzić sobie z punktami 3-5, a szczególnie z dwoma ostatnimi.
1. Jaka funkcja odpowiada opcji "Dopasuj płótno do warsttw" (Fit Canvas to Layers ) - funkcja której działanie wygląda na podobne to gimp-image-resize-to-layers, ale mam wrażenie że to nie ta.
2. Jak programowo wyśrodkować dwie warstwy jedna względem drugiej?
Jeśli ktoś z Was mógłby coś podpowiedzieć to będę bardzo wdzięczny. A może znacie jakiś kod skryptu script-fu, który wykonuje podobne operacje bym mógł podpatrzeć kod?
Pozdrawiam i z góry dzięki mw
|
|
|
|
|
|
|