python字符画

背景
  顾名思义,字符画就是由字符组成的“画”,效果如下图所示。
  在这里插入图片描述
注: 可以点击页面右上角“文件目录”图标,选择src/step3/answer/step3_2.txt文件,查看字符画效果,如下图所示。
在这里插入图片描述
如下图所示,屏幕上显示的字符会占据一个矩形区域,若矩形区域为白色、字符为黑色,则当这个字符笔画较少时,区域看起来会比较“白”,反之则较“黑”,而这种“黑”“白”程度就形成了一种特殊的“灰度”。

在这里插入图片描述
一个字符所占的矩形区域可以看作是图像中的一个像素,则一个 m 行、每行 n 个字符的文本就相当于一个分辨率为 m×n 的“图像”,往这幅“图像”的“像素”中填入不同字符,就会使各个“像素”呈现出不同的“灰度”,从而呈现出“画”的效果,这便是字符画的原理。
  要将一幅真彩色图像转换成字符画,可以先将其转换成灰度图,再将每个像素的灰度值转换成某个字符即可。现在的关键问题是如何将一个灰度值 gray 转换成对应字符,方法如下。
  定义字符串:

@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'

设其长度为 N。该字符串给出了字符画中所有可能出现的字符,且字符串中越靠前的字符越“黑”,越靠后的越“白”。因此,只要将灰度值的取值范围 [0,255] 与这 N 个字符建立对应关系,即可实现转换。实际上,对于灰度值gray,其对应的是字符串中第int(N*gray/256)号字符(这里的int函数起到向下取整的作用)。

任务
  本关任务是补全程序,使其能将一幅真彩色图像转换成字符画,关于代码的相关说明见注释。

相关知识
  本关程序的框架与之前关卡类似,但有以下几个方面需要说明。
  1)如果图像的分辨率较高,则转换后的字符画有很多行,每行有很多字符,这会影响观看效果,所以初始程序首先对原始图像进行了缩放,将其宽度调整为w、高度调整为h,与之对应地,生成的字符画每行有w个字符,总共h行。
  2)转换时,应采用“逐行

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值