задача
Напишите программу или функцию, которая берет изображение ширины wи высоты h, а также два целых числа a <= w/2и b <= h/2и выводит художественное представление изображения ascii с размерами ax b.
Искусство ascii должно быть создано с помощью следующих шагов (или другого процесса с тем же выводом):
Изменение размера
wхhизображений на2aе2b. Цвет пикселя(x, y)в измененном изображении должен быть равен среднему значению цветов всех пикселей исходного изображения внутри прямоугольника со следующими углами:(floor[x * w/2a], floor[y * h/2b]) (ceil[(x+1) * w/2a], ceil[(y+1) * h/2b])Изображение с измененным размером должно быть ненасыщенным, беря среднее значение красного, зеленого и синего компонентов цвета и устанавливая для каждого компонента это среднее значение.
Символ должен быть выведен для каждого блока пикселей 2x2, следуя приведенным ниже правилам:
- Позвольте
e = 3 - floor[color/64], где цвет относится к красной составляющей цвета верхнего левого пикселя (в диапазоне 0..255). Позвольтеf,gиhссылаются на это значение, но для верхнего правого, нижнего левого и нижнего правого пикселей соответственно. - Пусть
zбудет в среднемe,f,g,h. - Выведите символ, соответствующий следующему (белый представляет пиксель, где
3 - floor[color/64]ноль, а серый представляет ненулевой).
= Выведите пробел ( )
или
= вывод, "еслиe (or f) >= 2и в'противном случае.
или
= вывод, ,еслиg (or h) >= 2и в.противном случае.
или
= Выход-
или
= Выход;
= Выход \
= Выход /
= Выход J
= Выход L
= Выход 7
= Выход P
z = 1: вывод*.z = 2: выводC.z = 3: вывод#.
- Позвольте
Другие примечания: Все средние значения, полученные на вышеуказанных этапах, должны использовать целочисленное деление (т.е. округление до 0).
Вы можете использовать библиотеку для чтения изображений, но библиотеки нельзя использовать для шагов изменения размера и десатурации.
вход
Ваша программа примет три части данных:
- Изображение. Это изображение может быть в любом формате по вашему выбору (например, PNG, PPM)
- Ширина ascii art (в количестве символов)
- Высота искусства ascii (в количестве символов)
Ввод может быть прочитан через STDIN, передан как аргумент командной строки, сохранен как переменная и т. Д.
Выход
Ваша программа выведет ascii art, сгенерированный из изображения и через процесс, описанный выше. Каждая строка должна иметь одинаковую ширину (ширину, переданную в качестве входных данных), и никакие лишние пробелы не могут быть добавлены или удалены. Последняя строка может иметь завершающий символ новой строки, но это не обязательно. Пустые строки (строки только с пробелами) не должны быть пропущены.
Примеры
Все изображения были взяты из Википедии и переданы в общественное достояние. Предполагается, что ваша программа будет работать для всех изображений и допустимых входных данных.

Ширина = 52, Высота = 25:
.-- *** - ----.
- ********** L .-- .-- 7 ---- P-
.J ****************. . ********* \.
****************** L \ J ********** '.
- ********************. J *********** л /
J *********************; ./*************.L
; ********************* PJ **************; 7;
. ********************** '. *************** ;; *
; **********************; ***************; J *.
*********************** *******П********'**;
C ********************* C ******* P; *******. **;
C ********************** J ***************; **;
С *********************; **************** **.
**********************' ***************П;**
J ********************* P *************** / ***
. ********************** 7 ************* 'J **;
; ******************** C "'P *********** PJ ***'
"7 ****************** C" '********** P. ** C;
'* C *************'; ********* - J ** CP
'* C ********** P 7 ** 7 ** P / - **** P
- * CCCCC * P- '7 ******** P'
'---' --- '
Ширина: 70, Высота: 3:
---------------------------. .----------------
J ***************************** P -J ***************** *** / ** J;
----------*********П---------' -------------------- -»

Ширина: 50, Высота: 25:
.J ---
.J * P --- J * L--.
J *** 'L -J *********** -
J ****; **************** L
; ***** '.J ********************
J **** 7 ************************ P
** CC *; . ********* *********** LJ P-
** C * P 'J ********************** -
7 * C * L **********************;
J * С **; **********************;
JC ** C **. ; ; ******** CCC * C ** КПКГ **
"7 ***** L. 7 ***** CCCCCC **** CC ** '
- *****. -J - ** C * C * CC ****** CC * '
**; CC ***; «** CCC ***** КПКГ *;
'- **** - - *** CCCCC *** -
'------'

Ширина: 26, Высота: 17:
-, л
J - ** L .C #
J '; * PL, C # "
.PP 7. JC7P
;; * J ;; , C'C;
J; CC; L C "#
* L 7-P; *; ПК
7CL *** J * PC '#
'7 # C * C # P'; P JC # C-
J # CCC # L .JC # CJCC ## C;
; # - - #, CCC # CCCCCCCC
; * .- -.C; ; CCCCCCCCCCCC
; **** J ** L; CCCCCCCCCCCC
; *******; «CCCCCCCCCCCP
******* CCCCCCCCCCC
'* P-7 *' "CCCCP '-
«---
Это код-гольф , поэтому выигрывает самый короткий ответ.