AUTOR DATA ODDANIA Wojciech Mieszczak 29 czerwiec 2015 TEMAT PROJEKTU Tilt-shift - aplikacja na system mobilny ios 1. Tilt-shift Tilt-shift jest to technika stosowana w fotografi wykorzystywana do tworzenia efektu miniatur. Tilt (pochylenie) zmienia obrót płaszczyzny ostrości, a shift (przesunięcie) punkt będący środkiem perspektywy. Taka operacja pozwala zamienić zdjęcia realnych obiektów w ich miniaturowy model. Rysunek 1: Przykłady zdjęć z wykorzystaniem efektu Tilt-shift.
2. Swift i ios(8) Aplikacja została przygotowana z wykorzystaniem języka Swift na najnowszą wersję mobilnego systemu operacyjny ios 8. Swift jest nowym językiem programowania zaproponowanym przez Apple 2 czerwca 2014 roku podczas Worldwide Developers Conference. Główną technologią służącą do analizy i przetwarzania obrazów wykorzystywaną przez systemy operacyjne ios oraz Mac OS X jest Core Image, w której to niskopoziomowe operacje na plikach grafcznych zostały opakowane w rozbudowane i łatwe w użyciu API. Framework Core Image umożliwia dostęp do wbudowanych fltrów, a także pozwala na ich łączenie w celu utworzenia własnych. Właściwość ta została wykorzystana w niniejszej aplikacji. Rysunek 2: Przetwarzanie obrazów z wykorzystaniem Core Image.
3. Algorytm Do zaprogramowania fltru Tilt-shift został wykorzystany przepis pochodzący z materiałów kierowanych dla osób pragnących osiągnąć podobny efekt w programach do obróbki plików grafcznych typu Adobe Photoshop. 1. Stwórz rozmytą wersję obrazka, 2. Stwórz dwa liniowe gradienty przechodzące od koloru do przezroczystości, 3. Z uprzednio utworzonych gradientów stwórz maskę, 4. Wykorzystaj maskę do przycięcia rozmytej wersji obrazka. Schemat działania został zobrazowany grafcznie na rysunku 3. Rysunek 3: Tworzenie efektu Tilt-shift krok po kroku. Pierwszym krokiem, który nie został uwzględniony w powyższym przepisie, było stworzenie kwadratowej wersji obrazka. Działanie to miało na celu tylko i wyłącznie usprawnienie prezentacji efektów na ekranie ustawionym w orientacji portretowej. Aplikacja umożliwia wybór promienia rozmycia oraz punktów początku i końca gradientów. Dodatkowo została wyposażona w możliwość wyboru obrazka z biblioteki i zapisanie go po skończonej edycji.
4. Implementacja Do implementacji według powyższego algorytmu zostały użyte 4 wbudowane fltry Core Image. let blurredimage = CIFilter(name: "CIGaussianBlur", withinputparameters: [ kciinputimagekey: inputimage, kciinputradiuskey: gaussianblurradius Listing 1: Tworzenie rozmytej wersji obrazka. let imageheight = inputimage.extent().size.height let solidgreen = CIColor(red: 0, green: 1, blue: 0, alpha: 1) let transparentgreen = CIColor(red: 0, green: 1, blue: 0, alpha: 0) let topgradient = CIFilter(name: "CILinearGradient", withinputparameters: [ "inputpoint0": CIVector(x: 0, y: imageheight * topgradientstart), "inputpoint1": CIVector(x: 0, y: imageheight * topgradientend), "inputcolor0": solidgreen, "inputcolor1": transparentgreen Listing 2: Tworzenie górnego liniowego gradientu. Analogicznie został przygotowany dolny. let maskimage = CIFilter(name: "CIAdditionCompositing", withinputparameters: [ kciinputimagekey: topgradient.outputimage, kciinputbackgroundimagekey: bottomgradient.outputimage Listing 3: Tworzenie maski. let tiltshift = CIFilter(name: "CIBlendWithMask", withinputparameters: [ kciinputimagekey: blurredimage.outputimage, kciinputmaskimagekey: maskimage.outputimage, kciinputbackgroundimagekey: inputimage Listing 4: Tworzenie efektu Tilt-shift.
5. Przykładowe rezultaty Na rysunku 4 zostały przedstawione przykładowe rezultaty działania aplikacji. Rysunek 4: Przykłady działania aplikacji.
6. Wnioski Aplikacja działa zgodnie z przyjętymi założeniami. Środowisko i narzędzia użyte do jej stworzenia w znaczny sposób ułatwiły oraz przyspieszyły pracę. Jak zostało zaprezentowane, korzystając z niewielkiej liczby podstawowych funkcjonalności, został osiągnięty zamierzony efekt. Pokazuje to spory potencjał jaki tkwi w Core Image jeśli chodzi o wykorzystanie tej technologii do analizy i przetwarzania obrazów. Do pracy została dołączona paczka zawierająca wszystkie pliki źródłowe.