Реализовать генерацию изображения на iOS на CIFilter (уже есть JS код)

35 000 руб. за проект
27 июля 2019, 06:45 • 6 откликов • 40 просмотров
Задача: детерминестически сгенерировать изображение на основе трех цветов и seed-а.

На вход подается три цвета (примеры ниже) и random seed (integer64), на выходе - квадратный паттерн заданного размера (1200x1200).
Паттерн должен получаться детерминестическим - тоесть если на вход подать те же цвета и тот же seed, то алгоритм каждый раз должен возвращать один и тот же паттерн.

Примеры конечного результата

Алгоритм
Конечный паттерн получается в три шага:
Картинка, как это выглядит

ШАГ 1. Создаем облака и применяем к ним Gradient Map, с помощью следующих классов iOS:
GKPerlinNoiseSource + GKNoise + GKNoiseMap

Пример:
let noiseSource = GKPerlinNoiseSource(frequency: 2.6, octaveCount: 7, persistence: 0.5, lacunarity: 2.0, seed: Int32(Int.random(in: 0..<1000000000)))
let color0 = UIColor(red: 11.0/255.0, green: 164.0/255.0, blue: 230.0/255.0, alpha: 1.0)
let color1 = UIColor(red: 226.0/255.0, green: 74.0/255.0, blue: 107.0/255.0, alpha: 1.0)
let color2 = UIColor(red: 173.0/255.0, green: 52.0/255.0, blue: 33.0/255.0, alpha: 1.0)
let colors: [NSNumber: UIColor] = [-1: color0, 0: color1, 1: color2]
let noise = GKNoise(noiseSource, gradientColors: colors)
let noiseMap = GKNoiseMap(noise, size: double2(4,4),
origin: double2(0,0),
sampleCount: int2(640,640),
seamless: false)
let texture = SKTexture(noiseMap: noiseMap)
return texture
Playground: https://www.dropbox.com/sh/jwfw6vrrmntoz3d/AAAdIBT...

ШАГ 2:
Применяем к тому что получилось на предыдущем шаге Pixel Sort
Пример тут: https://generated.space/sketch/interactive-pixel-s...
JavaScript код: https://github.com/kgolid/pixel-sorting/blob/maste...

Ваша задача на этом шаге - переписать этот алгоритм под iOS на CIFilter
https://developer.apple.com/library/archive/docume...

ШАГ 3:
Применяем к тому что получилось на предыдущем шаге Noisify

Пример тут: https://generated.space/sketch/noisify/

JavaScript код:https://github.com/kgolid/noisify/blob/master/inde...

Ваша задача на этом шаге та же что и на предыдущем - переписать этот алгоритм под iOS на CIFilter
https://developer.apple.com/library/archive/docume...


Финальный результат предоставить в виде набора классов в Playground-e или проекте в Xcode.
Файлы