在上次的教程中,我们只是将图像转换为txt文本文件,而txt文本文件是没有颜色的。
在显示某些图片的时候,我们往往希望可以包含颜色信息。
这样图像便显得更加生动。

接下来我便教大家如何将图像转换字符画的时候,同时具有颜色,输出一幅带色彩的字符画。
以下是具体代码:

#-*- coding:utf-8 -*-
import os
from PIL import Image, ImageFont, ImageDraw
import argparse
#命令行输入参数处理
parser = argparse.ArgumentParser()
parser.add_argument('file')
parser.add_argument('-o','--output')#获取参数
args = parser.parse_args()
File = args.file
OUTPUT = args.outputascii_char = list("MNHQ$OC67)oa+>!:+. ")#将像素转换为ascii码
def get_char(r,g,b,alpha = 256):if alpha == 0:return ''length = len(ascii_char)gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)unit = (256.0+1)/lengthreturn ascii_char[int(gray/unit)]if __name__=='__main__':im = Image.open(File)WIDTH = int(im.width/6) #高度比例为原图的1/6较好,由于字体宽度HEIGHT = int(im.height/15)  #高度比例为原图的1/15较好,由于字体高度im_txt = Image.new("RGB",(im.width,im.height),(255,255,255))im = im.resize((WIDTH,HEIGHT),Image.NEAREST)txt = ""colors = []for i in range(HEIGHT):for j in range(WIDTH):pixel = im.getpixel((j,i))colors.append((pixel[0],pixel[1],pixel[2]))#记录像素颜色信息if(len(pixel) == 4):txt += get_char(pixel[0],pixel[1],pixel[2],pixel[3])else:txt += get_char(pixel[0],pixel[1],pixel[2])        txt += '\n' colors.append((255,255,255))dr = ImageDraw.Draw(im_txt)font=ImageFont.load_default().font#获取字体x=y=0#获取字体的宽高font_w,font_h=font.getsize(txt[1])font_h *= 1.37 #调整后更佳#ImageDraw为每个ascii码进行上色for i in range(len(txt)):if(txt[i]=='\n'):x+=font_hy=-font_wdr.text([y,x],txt[i],colors[i])y+=font_w#输出im_txt.save("output.png")

要达成如上效果,一下几点很重要:
colors.append((pixel[0],pixel[1],pixel[2]))#记录像素颜色信息
同时这次使用ImageDraw为每个ascii码进行上色,同时将文本文件转换为图像进行输出:

    for i in range(len(txt)):if(txt[i]=='\n'):x+=font_hy=-font_wdr.text((y,x),txt[i],font = font, fill = colors[i])y+=font_wim_txt.save("output.png")

在上述代码中,为了使画面达到预期的效果,需要对图像进行一定的调整:
WIDTH = int(im.width/6)
#高度比例为原图的1/6较好,由于字体宽度
HEIGHT = int(im.height/15)
#高度比例为原图的1/15较好,由于字体高度
font_h *= 1.37
#通过实际操作,这样调整后更佳

以下是具体效果:


以上代码使用后你会发现一个问题,它只可以转换静态图,如png,jpg,jpeg等,但是无法转换gif这类动态图。
下篇文章,我将教大家如何将gif图也同样的转换为字符画。

简单实现图片转彩色字符画相关推荐

  1. python动态图片转字符画_【小工具】使用python将图片转彩色字符画

    [Python] 纯文本查看 复制代码# -*- coding:utf-8 -*- from PIL import Image, ImageFont, ImageDraw from tkinter i ...

  2. python学习之手把手教你将图片变成黑白或彩色字符画(骚操作)

    文章目录 前言 一.字符画的实现原理 二.黑白字符画实现代码 三.彩色字符画生成 代码实现: 总结 前言 字符画这个话题,似乎早在贴吧时代就已经被玩烂了.在百度图片随便一搜索,就能够看到非常多.然后在 ...

  3. canvas全局合成画月牙_教你用Python将自己喜欢的图片转成字符画,居然还有动态的 - 松鼠爱吃饼干...

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章一级Python技术 ,作者派森酱 前言 字符画是一种由字母,标点或其他字 ...

  4. 【云云怪】黑白/彩色字符画/字符视频,代码搜集

    1,黑白字符画(原图可以不用太大): import cv2 import random import numpy as npdef img2strimg(frame, K=3):height, wid ...

  5. 教你用Python将图片转化为字符画!附源代码

    点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天早上8点20分, 第一时间与你相约 每日英文 Whatever you are facing today, remem ...

  6. python动态图片转字符画_python 图片在线转字符画预览

    关于python图片转字符画,相信大家都不陌生,经常出现在 n个超有趣的python项目中. 今天我也来实践这个有趣的项目,更进一步的是把这个功能做成一个在线的网站,直接上传图片生成字符画,在线预览可 ...

  7. c语言将一幅画转换为字符画,C#将图片转换成字符画

    先看一下效果图 在Main方法中调用(首先要添加程序集System.Drawing,然后引入命名空间System.Drawing) ConvertToChar(new Bitmap(@"D: ...

  8. python动态图片转字符画_使用python实现一个将图片转换成字符画的功能

    使用python实现一个将图片转换成字符画的功能 发布时间:2020-11-05 16:01:25 来源:亿速云 阅读:97 使用python实现一个将图片转换成字符画的功能?针对这个问题,这篇文章详 ...

  9. 实现图片转换成字符画

    python小程序:实现图片转换成字符画 看到网上有很多这样的小程序,自己动手做一个 内附详细说明~ 先附上效果图 部分解释 运行平台: Win10 Python版本: Python3.9  IDE: ...

  10. python将图片转为字符_Python将图片转化为字符画

    简介 最近发现一个有趣的操作, 将一张图片转化为字符串的模式来显示! 如图 准备 首先需要安装一个CV模块用来导入图片的#pip install opencv-python 然后明确下程序的设计思路1 ...

最新文章

  1. 2021-05-10 Matlab短时傅里叶变换和小波变换的时频分析
  2. android生成png图片,Android 中将 base64图片 解码为.png图片
  3. 信息安全官谁:逼近的挑战,你准备好了吗?
  4. 云计算(cloud computing)十大问答
  5. 教育部计算机考研大纲,2018考研大纲从哪里看?
  6. Java私塾的一些基础练习题(一)
  7. 架构解密从分布式到微服务:微服务架构到底是什么?
  8. MySQL数据类型中的二进制类型有_在MySQL数据类型中,常用的数据类型有()。A.()数值类型()B.()字符串类型()C.()日期时间类型()D.()二进制类型...
  9. .Net Framework System.Collections 集合类
  10. 上海内推 | 上海人工智能实验室招聘计算视觉实习生(NeRF神经渲染方向)
  11. matlab 人群疏散,建筑物内的人员数量确定方法和人群疏散方法
  12. 23王道——建立中序线索树,找前驱后继,并用其遍历
  13. 对嵌入式开发方向的一些思考:在物联网方向
  14. 让世界不再有“此生未完成”,臻和科技为患者带来守护之力
  15. 【概念】区块链中账本是什么?通用区块链平台账本概念介绍,一个谁都能看懂的账本概念
  16. 奇偶数求和:输入任意个正整数(以输入负数表示结束输入),分别求出所有的奇数之和,所有的偶数之和。 示例: 输入格式:1 2 3 4 -1 输出格式:sumodd=4 sumeven=
  17. 138 - 打球过程
  18. html表格标题中副标题,excel数据表格制作副标题-如何在excel图表中添加标题?
  19. 腾讯产品18讲10:把握产品需求的管理节奏
  20. 类似于语雀、石墨文档私有化部署开源代替品,你尝试了吗?

热门文章

  1. 小程序毕设作品之微信企业公司小程序毕业设计(4)开题报告
  2. PHP集成开发环境介绍
  3. dB,dBm W之换算关系
  4. 推荐 DBeaver 数据库管理工具 PD数据库建模
  5. 矩阵的Cholesky 分解
  6. Python 3.9 新特性速览 - Ricequant米筐量化
  7. 华为无线路由器信道怎么测试软件,华为路由WS5200怎么修改wifi信道
  8. WEB测试和APP测试的区别,全网最齐全的体系梳理,不进来看看?
  9. 【官方】追踪百度钱包品牌LOGO设计
  10. Mugeda(木疙瘩)H5案例课—房地产楼书H5制作-岑远科-专题视频课程