任务
编写一个程序或函数,该程序或函数获取一个宽度w
和高度为h
2的整数a <= w/2
和b <= h/2
的图像,并输出该图像的图像,其尺寸为a
x b
。
应该通过以下步骤(或具有相同输出的其他过程)生成ascii艺术:
将
w
xh
图像调整为2a
x2b
。(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]
,其中color表示左上方像素的红色分量(在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艺术的宽度(以字符数为单位)
- ascii艺术的高度(以字符数为单位)
输入可以通过STDIN读取,作为命令行参数传递,存储为变量等。
输出量
您的程序将通过上述过程输出从图像生成的图像。每行必须具有相同的宽度(作为输入传递的宽度),并且不得添加或删除多余的空格。最后一行可能包含尾随换行符,但这不是强制性的。空行(只有空格的行)一定不能省略。
例子
所有图像均取自Wikipedia,并已发布到公共领域。您的程序应适用于所有图像和有效输入。
宽度= 52,高度= 25:
.-- ***-----。 -********** L。-.-- 7 ---- P- .J **************** 。********* \。 ,****************** L \ J **********'。 -******************** J *********** L / J *********************; ./*************.L ; ********************* PJ **************; 7; 。************************''。*************** ;; * ; **********************; ***************; J *。 *********************** ******* P ********'**; C ********************* C ******* P; *******。**; C ********************** J ***************; **; C*********************; ****************。**; **********************'*************** P; ** 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 **; ---------- ********* P ---------'-------------------- -'
宽度: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 * C **; **********************; JC ** C **。; ; ******** CCC * C ** CCCC ** “ 7 ***** L。7 ***** CCCCCC **** CC **' -***** -J-** C * C * CC ****** CC *' ; ** CC ***; '** CCC ***** CCCC *; '-****--*** CCCCC ***- '------'
宽度:26,高度:17:
-,L J-** L .C# J'; * PL,C#“ .PP 7. JC7P ;; * J ;; ,C'C; J; CC; L C“# * L 7-P; *; PC 7CL *** J * PC'# '7#C * C#P'; P JC#C- J#CCC#L .JC#CJCC ## C; ;#--#,CCC#CCCCCCCC ;*。- -。C; ; CCCCCCCCCCCCCC ; **** J ** L; CCCCCCCCCCCC ; *******; 'CCCCCCCCCCCCCP '*******'CCCCCCCCCCC' '* P-7 *'“ CCCCP'- '-
这是代码高尔夫球,因此最短的答案将获胜。
2
多数民众赞成在安静的
—
残酷
说图像输入时,您是指文件名吗?还是实际的图像数据?
—
sirpercival,2015年
@sirpercival都很好
—
es1024 2015年