GIMP/Programowanie/Mathmap
Mathmap jest to narządzie do tworzenia i przetwarzania obrazów. [1]
Może być użyte jako:
- wtyczka (ang. plugin) do Gimpa
- narzędzie do pracy z linii poleceń (tylko wersja dla Linuksa)
Sposoby użycia wtyczki:[2]
- jako jeden z wielu filtrów Gimpa
- jako narzędzie do tworzenia nowych filtrów:
- z użyciem graficznego Composer'a (podobny do Quartz Composer dla MacOS X lub Yahoo! Pipes).
- z użyciem wbudowanego języka programowania[3]
Opracowane na podstawie:
- OS: Linux
- dystrybucja Ubuntu wersja 10.04 LTS - Lucid Lynx
- jądro 2.6.32-31-generic x86_64
- GIMP 2.6.8 wersja wersja polska
- mathmap-1.3.4
Instalacja
[edytuj]Pobranie kodu źródłowego
[edytuj]git clone git://github.com/schani/mathmap.git cd mathmap git submodule init git submodule update
Wymagane pakiety
[edytuj]- The GIMP 2.4 (także libgimp2.0-dev)
- GSL (GNU Scientific Library),
- GSL CBLAS
- gsl bin
- fftw (version 3)
- libgtksourceview
- libjpeg, libpng, libgif (preferowany) lub libungif
- gettext
- bison
- flex
- clisp (także clisp-dev)
- doxygen
- libtool
Na Ubuntu także pakiety devel są wymagane
Kompilacja wtyczki
[edytuj]make sudo make install
Jeśli doinstalowywałeś jakieś pakiety to pamiętaj aby przed powtórnym wywołaniem make:
make clean
Uruchomienie
[edytuj]Z linii poleceń
[edytuj]Wywołaj:
mathmap --help
aby uzyskać pomoc.
Przykład użycia:
mathmap -s256x256 'filter gray () grayColor(0.5) end' out.png
To polecenie tworzy plik out.png o wymiarach 256x256 o kolorze w połowie szarym
Jako wtyczkę do GIMPA
[edytuj]W wersji 2.6 gimpa polskiej wtyczkę wywołujemy poprzez Menu/Filtry/Ogólne/MathMap gdzie mamy do wyboru poszczególne filtry lub wspólne okno dialogowe.
Graficzny kompozytor filtrów
[edytuj]W wersji 2.6 gimpa polskiej kompozytora wywołujemy okno dialogowe wtyczki poprzez Menu/Filtry/Ogólne/MathMap/MathMap i otwieramy zakładkę Composer
Programowanie tekstowe
[edytuj]W wersji 2.6 gimpa polskiej kompozytora wywołujemy okno dialogowe wtyczki poprzez Menu/Filtry/Ogólne/MathMap/MathMap i otwieramy zakładkę Expressions. Możemy tu wpisywać swoje filtry lub wczytywać i edytować istniejące (pliki z rozszerzeniem mm).
Programowanie
[edytuj]Programy w języku Mathmap nazywane są filtrami.
Wewnętrzny język programowania
[edytuj]Wstęp
[edytuj]Składnia wygląda następująco:
options filter name (user_values) expression end
Poszczególne elementy oznaczają:
- options = opcje filtra (mogą nie występować)
- filter = słowo kluczowe oznaczające początek definicji (zawsze musi być)
- user_values = parametry filtru (mogą nie występować)
- expression = wyrażenie opisujące co filtr robi
- end = słowo kluczowe oznaczające koniec definicji (zawsze musi być)
Zasada działanie filtra jest prosta: dla każdego piksela obrazu oblicza kolor, czyli ostatnim elementem w wyrażeniu jest zawsze kolor piksela.
Każda wartość jest krotką (ang. tuple), tzn. listą wartości poprzedzoną znacznikiem (ang. tag). [4]
Na przykład rgba:[1,0,0,1] oznacza kolor czerwony o zerowej przeźroczystości (ang. fully opaque color red)
Pojedyncze liczby mogą być zapisywane normalnie, nie jako krotki. Na przykład 3.1415 odpowiada nil:[3.1415].
Układy współrzędnych obrazu
[edytuj]Są 2 układy współrzędnych:
- kartezjański: xy
- biegunowy (polarny): ra
Kolor
[edytuj]Mamy dwa rodzaje koloru:
- rgba (RGBA Color), np. rgba:[1,0,0,1] oznacza kolor czerwony o zerowej przeźroczystości (ang. fully opaque color red).
- hsva (HSVA Color)
Jednolity kolor RGB obrazu:
filter blue () rgbColor(0, 0, 1) end
Gradient szary:
proporcjonalny do wartości x:
filter gray () # x is changing from -1 to 1 grayColor(x) # each color component is proportional to x end
proporcjonalny do bezwzględnej wartości x:
filter gray2 () p=abs(x); # x is changing from -1 to 1 grayColor(p) # each color component is proportional to abs(x) end
proporcjonalny do bezwzględnej wartości sin(x*pi:
filter sin () grayColor(abs(sin(x*pi))) end
Inna wersja z przeskalowaniem zakresu zmiennej "x" z [-1,1] do [0,1]:
filter gray_gradient () grayColor(scale(x, -1, 1, 0, 1)) end
to samo inaczej zapisane:
filter gray_gradient () grayColor((x+W/2)/W) end
proporcjonalny do odległości piksela od centrum = (0,0) bez powtórzeń:
filter gray_radius () grayColor(r) # color component is proportional to radius end
proporcjonalny do odległości piksela od centrum = (0,0) z powtórzeniami:
filter rmod () grayColor((r%0.4)/0.4) end
proporcjonalny do kąta piksela (a = angle):
filter gray_angle () # angle in radians: (0 <= a < 2*pi) # polar coordinate of pixel = ra p=scale(a, -2*pi, 2*pi, -1, 1); # map a from [-2pi,2pi] to [-1,1] range grayColor(p) # color component is proportional to angle end
Obraz
[edytuj]Aby stworzyć nowy obraz: cały czerwony
filter red () rgbColor(1, 0, 0) end
Jest to filtr o nazwie "red". Używa wbudowanej funkcji rgbColor.[5]
Filtr (wyrażenie czyli ang. expression) możemy zapisać jako plik z rozszerzeniem mm: red.mm w podkatalogu examples lub
~/.gimp-2.6/mathmap/expressions
Jeśli chcemy zmodyfikować istniejący obraz:
filter ident (image in) in(xy) end
Ten filtr nic nie robi (ident), ale pokazuje najprostszy filtr operujący na istniejącym już obrazie.
Efekty działania
[edytuj]-
Efekt Droste'a
-
Efekt Droste'a
-
Efekt Droste'a
-
Efekt Mercatora
-
Animowana spirala
-
Efekt poziomej fali
Więcej na:
Licencja
[edytuj]Jest to wolne oprogramowanie (ang. Free Software) na licencji GNU General Public Licence.