原理:

  • 将简单的表情图取灰度图像二值化,然后不同值用不同的字符串代替该像素即可
  • 扩展一下,可自行定义一个数值(最好为2的指数幂,2,4,8,16等),将256个灰度值等分成几个范围,以4为例,先自行定义四个字符0-63为第一块,64-127为第二块,然后扫描灰度图,按灰度值确定属于四个范围的哪一块,然后用相应的字符替换该像素即可
  • 显而易见的是:当我们取值越大,给出的字符越多时,越能体现图像的细节,但是鉴于字符的文本显示非常依赖于编辑器,所以效果可能不是很好。

一些总结

举例字符数组的排列比较有讲究,换一个顺序,图片的展示效果完全不一样,这个大家可以自行测试。

以我个人的使用经验来看,字符之间的渐变应该比较小,但是两端的区别较大,这样的设置显示效果理论上应该比较好,举例:mn这两个字符相邻比较合适,空格和$@#之类的字符应该隔得比较远,简单来说整个样例字符的分布理想状态应该类似于一条由明到暗的渐变带一样

from PIL import Image

chars = list("A-% ,+1n&M-B/\?<8&WM#$_+~*|(){}[]>i!lI;:,\"^`'. ")

# 图像整体使用多少个字符来表示? 必须为2的指数倍2,4,6,8,16,32最大
# 对于只想看轮廓的图,2或4显示效果较好,对稍微追求细节的图稍微弄大一点
num = 4;
chars = chars[:num]
# isThumb = True
isThumb = False
width,height =80,40

#分节因子
factor = int(256 / len(chars))

# 依据灰度值阶梯返回不同的字符
def get_char(pix):
    for i in range(0,len(chars)):
        if pix < factor * (i+1):
            return chars[i]

img = Image.open('flower.jpg')

if img.mode=='P' or img.mode =='RGBA':
     im=Image.new('RGB',img.size,'white')
     im.paste(img.convert('RGBA'),img.convert('RGBA'))
     img= im
# 转化为灰度图
img = img.convert("L")
w,h = 0,0
# 进行图片大小的变换
if isThumb:
    w,h = width,height
    img=img.resize((w,h),Image.NEAREST)   #NEAREST低质量图
else:
    w,h = img.size
    img = img.resize((w,int(h/2)),Image.NEAREST)
    h= int(h/2)

data=[]
pix = img.load()
length = len(chars)
data = ""
#扫描整个图片,按灰度置换图片
for i in range(0,h):
    line = ""
    for j in range(0,w):
        line += get_char(pix[j,i])
    data += line+"\n"

with open("a.txt",'w') as f:
    f.write(data)

知识点记录:

一、图片的打开与显示

from PIL import Image

img=Image.open('d:/dog.png')

img.show()

另一种方式

from PIL import Image

import matplotlib.pyplot as plt

img=Image.open('d:dog.png')

plt.figure("dog")#图片的名称

plt.imshow(img)

plt.show()

打开图片后,可以使用一些属性来查看图片信息

print(img.size)#图片的尺寸
print(img.mode)#图片的模式
print(img.format)#图片的格式

二、图片的保存

img.save('d:/dog.jpg')

就只需要一行代码,不仅能保存图片,还可以转换格式

三、读取图像并将其转换成灰度图像

img=Image.open('d:/dog.jpg').convert('L')
坐标轴不显示的操作:

from  pylab import *

axis('off')

四、显示轮廓图像和直方图

from PIL import Image
from pylab import *
 
# 读取图像到数组中
im = array(Image.open('time.jpg').convert('L'))
 
# 新建一个图像
figure()
# 不使用颜色信息
gray()
# 在原点的左上角显示轮廓图像
contour(im, origin='image')
axis('equal')
axis('off')

figure()
hist(im.flatten(),128)
show()

python将图片表情包转化成字符相关推荐

  1. 教你用Python爬取表情包网站下的全部表情图片

    教你用Python爬取表情包网站下的全部表情图片 又是我啦~~~ 最近上网的时候老看到有人用Python爬取表情包,心痒痒自己也整了一个. 使用到的扩展库:BeautifulSoup, request ...

  2. python恶搞表情包-Python自动生成表情包,python在手,从此斗图无敌手

    作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!! 表情包不仅仅是一种符号,更是一种文化:是促 ...

  3. 群里又会python的吗_自从会了Python在群里斗图就没输过,Python批量下载表情包!...

    原标题:自从会了Python在群里斗图就没输过,Python批量下载表情包! 导语 最近图慌,于是随便写了个表情包批量下载的脚本,没什么技术含量,纯娱乐性质. 让我们愉快地开始吧~ 开发工具 Pyth ...

  4. python 文本框不能放表情_用Python自动生成表情包,生活不易多才多艺!

    "一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态--表情包!!!!表情包不仅仅是一种符号,更是一种文化:是促进社交乃至社会发展的动力之一,就像懒. 我们坚持 ...

  5. python从入门到入土表情包-Python自动生成表情包,python在手,从此斗图无敌手

    作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!! 表情包不仅仅是一种符号,更是一种文化:是促 ...

  6. python做动态表情包下载_用 Python 开发一个【GIF表情包制作神器】

    之前小帅b写过这样一篇教程然后,好多人表示:虽然存了很多表情包但似乎还不是很过瘾因为它不可以自己来定制我们可不可以根据一些表情素材然后自己制作专属表情包呢像这样 本来小帅b想自己实现一个表情包制作器后 ...

  7. Python自动生成表情包 斗图再无对手!

    作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!! 表情包不仅仅是一种符号,更是一种文化:是促 ...

  8. Python自动生成表情包,从此斗图无敌手!

    作为一个数据分析师,应该信奉一句话--"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态--表情包!!!! 表情包不仅仅是一种符号,更是一种文化,是促进社交乃 ...

  9. 一个很皮的实践 Python自动生成表情包

    作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!! 表情包不仅仅是一种符号,更是一种文化:是促 ...

最新文章

  1. TCP编程函数和步骤
  2. STM32F0库函数初始化系列:PWM输出
  3. Angular 应用 bootstrapModule 映射的 app Component 的初始化逻辑
  4. 深度搜索问题c语言,C语言实现的图的深度搜索与广度搜索程序.doc
  5. 没人脉,没资源,没背景的人,最好的出路是什么?
  6. KVM(二)CPU 和内存虚拟化
  7. python设计查询余额程序_使用Python调取任意数字资产钱包余额功能
  8. 学校预付费云平台系统 的设计与应用
  9. 16进制编辑器 linux,Tweak - Linux下的16进制编辑器
  10. 为什么闹钟设置了却不响_手机闹钟不响是怎么回事 怎么设置闹钟【图文】
  11. 小米路由器LuCI Web服务
  12. 凭证打印纸的规格(打印凭证选择什么型号的纸)
  13. Javascript 执行上下文(ES3)
  14. Zcash中的Notes
  15. 第三次入手卡版掉毛飞翼
  16. Android layer type与WebView白屏
  17. ESP8266开发之旅 进阶篇⑨ 深入了解 802.11 无线协议(非常重要)
  18. Android FTP客户端使用,快速上传文件
  19. 半导体激光器(结构和工作原理)
  20. Cortex-M启动代码分析(以STM32F4为例)

热门文章

  1. 什么是 Scrum 中的 Timeboxing?
  2. 腾讯云从业者认证考试(学习笔记知识总结-全部章节)
  3. linux时间转换及比较
  4. Pyspark官方文档
  5. .Net Core3.1 Centos离线部署
  6. 2005年10月--至今,开发过的项目
  7. CTO、技术总监和技术经理有啥区别?
  8. CTO、技术总监、技术经理的区别 互联网技术团队的角色区分
  9. REDSHIFT学习笔记-渲染设置3_GIPhotonSSS
  10. 微软放弃的游戏被他们复活了:Windows经典「三维弹球」现实版,CAD建模、Arduino编程、数控机床打造,硬核致敬童年...