由图像转为字符画的实现而引发的问题,先上小程序代码:
#DrawCharImage.Py
from PIL import Image
ascii_char = list('~OUTHANMW') #字符画里的字符集,图片颜色越深对应的字符越浅,用户可自己设定
#使用灰度值将彩色图像转换为黑白文稿,白色为255,黑色为0
def get_char(r, b, g, alpha = 256):
if alpha == 0:
return ''
gray = int(0.2126*r + 0.7152*g + 0.0722*b)
unit = 256/len(ascii_char)
return ascii_char[int(gray//unit)]
#为了使生成的字符画有最佳效果,可使用Image类的resize(size)函数对图片重新设定大小
def main():
im = Image.open('astro.jpg')
WIDTH, HEIGHT = 500,300
im = im.resize((WIDTH,HEIGHT))
txt = ''
for i in range(HEIGHT):
for j in range(WIDTH):
txt += get_char(*im.getpixel((j,i)))
txt += '\n'
fo = open('pic_char.txt','w')
fo.write(txt)
fo.close()
main()
当然,以上程序并不难理解,运行后也得到了正确结果,在文本文件里展示如下:


缩略后大概是这个样子的。已经实现了图片转为字符画。
可是为什么到了后面越来越扭曲?
咦?明明每行字符个数是相同的,可是到了最后为什么每行长度差的这么大?
原因很容易想到,既然每行的字符个数是一样的,那肯定是记事本下每个字符的大小不一样导致的。
那有没有什么解决办法呢?很难过,本人并没有找到。
原因是当初设计记事本时的设计目标就只是把它当做一个文本编译器来用,几乎无格式,不支持排版、图片、表格等一系列操作,甚至连自动换行功能也是后来补上的,自然也就不能提供字符自动对齐的功能了。
本人找到唯一可行的办法就是一个空格一个空格的按,这样才能手动达到比较对齐的效果。
最后本人找到一个可以替代记事本的更好用的文本编译器推荐给大家:notepad++
软件打开后是这样的:

notepad++和Windows自带的记事本相比具有更强大的功能,弥补了记事本单一格式化和字符不对齐的问题,并且提供了更多功能供大家探索,以后就用它啦!
如果大家有什么可以让记事本对齐的更好的办法,欢迎留言或私信!
记事本拓展:
关于记事本编码格式的问题:http://blog.csdn.net/liyangbing315/article/details/5616643
本文探讨了Windows记事本中字符画显示扭曲的原因,由于记事本设计简单,不支持字符自动对齐。作者推荐使用notepad++作为替代,以解决格式化和对齐问题。

2584

被折叠的 条评论
为什么被折叠?



