python将图片转化为字符图
最近看到将图片转化为字符图的小实验,我觉得很有趣,所以决定自己实现一下。
步骤和原理如下:
- 读取图片的灰度值矩阵(0-255之间),灰度值矩阵主要反映的是图片的黑白程度,越黑越接近与0,越白越接近于255 
- 确定用于作画的字符 
- 根据灰度值确定代替字符,灰度值越小,其代替字符应该笔画越多(这样才能看起来颜色更深) 
- 把全部选好的代替字符写入文本 
- 选择字符的做法:用256(0-255又256个数)除以可以用于作画的字符的总长度,然后得到一个字符的灰度值区间。然后灰度值在某个区间是就转化为指定的字符。 
- 我从google图片下载了一张小猪佩奇的图片,侵删,然后用它来画字符画,结果如下: 
 
还是蛮像的! 
代码如下:
# coding: utf-8
import numpy as np
from PIL import Image
def img_to_char(image_path,height):
    '''
    将图片转化为字符
    image_path是图片的路径
    height是字符串图片的高度
    '''
    #读取图片
    img = Image.open(image_file)
    img_width, img_height = img.size
    # 假设字符的宽度是高度的3倍
    width = 3* height * img_width // img_height
    img = img.resize((width, height), Image.ANTIALIAS)
    #读取图片的灰度值矩阵
    data = np.array(img.convert('L'))
    #设定字符,字符数要是256的因子,这里取32
    chars = "#RMNHQODBWGPZ*@$C&98?32I1>!:-;. "
    N = len(chars)
    #计算每个字符的区间,//取整
    n = 256 // N
    #result是字符结果
    result = ''
    for i in range(height):
        for j in range(width):
            result += chars[data[i][j] // n]
        result += '\n'
    with open('img.txt', mode='w') as f:
        f.write(result)
if __name__ == '__main__':
    image_file = '10.jpg'
    height = 100
    img_to_char(image_file,height)
python将图片转化为字符图的更多相关文章
- Python matplotlib图片转化成矢量图并裁剪
		Python目前可以生成的图的格式是:eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff 在写论文时候我一般生成png ... 
- HTML5将图片转化成字符画
		HTML5将图片转化成字符画 字符画大家一定非常熟悉了,那么如何把一张现有的图片转成字符画呢?HTML5让这个可能变成了现实,通过canvas,可以很轻松实现这个功能.其实原理很简单:扫描图片相应位置 ... 
- 基于 canvas 将图片转化成字符画
		字符画大家一定非常熟悉了,那么如何把一张现有的图片转成字符画呢? HTML5 让这个可能变成了现实,通过 canvas,可以很轻松实现这个功能. 其实原理很简单:扫描图片相应位置的像素点,再计算出其灰 ... 
- 基于canvas将图片转化成字符画
		字符画大家一定非常熟悉了,那么如何把一张现有的图片转成字符画呢?HTML5让这个可能变成了现实,通过canvas,可以很轻松实现这个功能.其实原理很简单:扫描图片相应位置的像素点,再计算出其灰度值,根 ... 
- 通过javascript把图片转化为字符画
		1.获取上传图片对象数据 Javascript无法直接获取本地上传的图片的数据,html5可以解决这一问题 .html5里面的FileReader interface可以把图片对象的数据读到内存,然后 ... 
- Java 图片转换为字符图 CharMaps (整理)
		/* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ... 
- Python 图片转字符图
		pip install Image argparse pillow from PIL import Image import argparse #命令行输入参数处理 parser = argparse ... 
- 怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?
		分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.b ... 
- 普通图片转ascii码字符图
		效果图 基本思路 把图片每个像素点的信息拿出来,最重要的是拿到rgb的值 把每个像素点由rgb转成灰度图像,即0-255 给0-255分级,把每个等级的像素点转换成ascii码,完成 实现 第一步:获 ... 
随机推荐
- 【BZOJ】1046: [HAOI2007]上升序列(dp)
			http://www.lydsy.com/JudgeOnline/problem.php?id=1046 一直看错题....................... 这是要求位置的字典序啊QQQAAAQ ... 
- 【Openwrt】刷
			设定你的电脑ip 为192.168.1.100 网线一头连接lan口,另外一头连接电脑.WAN口不能插线. 按住路由器的qss 键,开启路由器的电,灯灭掉,等6秒左右灯会再次闪几下就松开,用googl ... 
- Objective-C Runtime初探:self super
			题目 上题目,已知A是爷爷,B是爸爸,C是孙子. @interface A : NSObject - (void)f; @end @interface B : A - (void)f; - (void ... 
- MySQL [Err]1449 : The user specified as a definer ('root'@'%') does not exist
			权限问题:授权 给 root 所有sql 权限 mysql> grant all privileges on *.* to root@"%" identified by &q ... 
- CodeForces 558C Amr and Chemistry (位运算,数论,规律,枚举)
			Codeforces 558C 题意:给n个数字,对每一个数字能够进行两种操作:num*2与num/2(向下取整),求:让n个数相等最少须要操作多少次. 分析: 计算每一个数的二进制公共前缀. 枚举法 ... 
- 剑指 offer set 24 扑克牌的顺子
			题目 从扑克牌中任意抽取出 5 张牌, 判断是不是顺子, 并且大小王可以看成任意的数字 思路 1. 把大小王当做 0 插入到数组中, 然后对数组排序 2. 统计相邻两个数之间的空隙数, 若空隙数大于 ... 
- iOS开发之--MVC 架构模式
			随着项目开发时间的增加,从刚开始那种很随意的代码风格,逐渐会改变,现在就介绍下MVC的架构模式,MVC的架构模式,从字面意思上讲,即:MVC 即 Modal View Controller(模型 视图 ... 
- shell脚本学习总结12--系统信号
			信号是Linux系统中一种进程通信机制.我们可以使用特定的信号来中断进程.每一种信号都同一个整数值相关联. kill命令可用来想进程发送信号,而trap命令用来处理所接收的信号. kill 列出所有可 ... 
- Linux命令之乐--md5sum
			md5sum命令用于生成和校验文件的md5值.它会逐位对文件的内容进行校验,它常用于检查文件的完整性. 读取文件的MD5值 [root@new ~]# md5sum /usr/local/sbin/* ... 
- pushViewController自定义动画http://blog.csdn.net/ralbatr/article/details/22039233
			本文转载至 http://blog.csdn.net/ralbatr/article/details/22039233 实现的主要代码如下: CATransition *transition = ... 
