Сейчас зима, и пришло время года, чтобы оно стало холодным (и чтобы странные разноцветные головные уборы начали появляться ... скоро). Давайте напишем некоторый код, чтобы сделать картинки аватара и другие изображения замороженными, чтобы соответствовать теме!
вход
Входными данными для подачи заявки на участие в этом конкурсе должны быть изображение (изображение, которое нужно сделать замороженным) и число (порог, который будет объяснен позже).
Вы можете вводить изображение любым способом, которым поддерживает их ваш язык (путь к файлу или URL-адрес в качестве аргумента, извлечение его из буфера обмена, перетаскивание изображения и т. Д.), А также в любом из перечисленных здесь форматов, который выражает цвета в RGB (вы вместо этого может поддерживать / требовать RGBA, но это не является обязательным требованием).
Вы можете также ввести число любым удобным для вас способом (аргумент командной строки, STDIN, диалоговое окно ввода и т. Д.), За исключением жесткого кодирования его в вашей программе (например n=10
). Если вы используете путь к файлу / URL для изображения, его также необходимо ввести таким же образом.
Выход
Программа должна обработать изображение в соответствии с описанием ниже, а затем вывести его любым удобным для вас способом (в файл, показать его на экране, поместить в буфер обмена и т. Д.).
Описание
Материалы должны обработать изображение с помощью следующих трех шагов. n
относится к числу, которое ваша программа получила в качестве входных данных вместе с изображением.
Примените размытие радиуса
n
к входному изображению, заменив значения R, G и B каждого пикселя средними значениями R, G и B для всех пикселей на расстоянииn
пикселей от Манхэттена , игнорируя все координаты за пределами границ. (Т.е. все пиксели, в которых сумма разности по X и разности по Y меньше или равнаn
.)(примечание: я использовал размытие по Гауссу для изображений выше, потому что для него была удобная встроенная функция, поэтому ваши изображения могут выглядеть немного иначе.)
Установите для каждого пикселя случайный пиксель в пределах расстояния от
n/2
пикселей («расстояние» определяется так же, как и на предыдущем шаге).Это должно быть сделано путем циклического прохода по изображению и установки каждого пикселя на случайный пиксель в этом диапазоне, чтобы некоторые пиксели могли полностью исчезнуть, а некоторые могли бы дублироваться.
Все изменения должны применяться одновременно. Другими словами, используйте старые значения пикселей (после шага 1, но до этого шага), а не новые значения после установки их в случайный пиксель.
Умножьте «синее» значение RGB каждого пикселя на 1,5, ограничив его значением 255 (или любым другим максимальным значением для полосы пикселей) и округлив вниз.
правила
Вы можете использовать библиотеки изображений / функции, связанные с обработкой изображений, встроенные в ваш язык; тем не менее, вы не можете использовать какие-либо функции, которые выполняют одну из трех основных задач, упомянутых в описании. Например, вы не можете использовать
blur
функцию, ноgetPixel
функция в порядке.Это код-гольф , поэтому выигрывает самый короткий код в байтах!
dx <= n && dy <= n
это точное представление о расстоянии Манхэттена, не так ли?