2020年12月1日

欢迎关注公众号:Leo的博客城堡。更多干货等你!

2018年4月8日

17:30

PS:嗯,作为初学python的第一个练手项目,有一些教程是在Linux下搭建实现的而且有一些还是用的python2实现的,之间也是遇到了一些大大小小的问题。麻雀虽小,五脏俱全,所以就写个教程做心得抑或总结以备忘。(全程是建立在初学者的思维和角度思考问题的,如是老鸟或大神请绕道~~~~)

写在开头:哒哒哒,如果正在阅读的是刚将python语法学完的新手,那不得不说这个项目很适合你,虽然整个文件只有50行左右的代码,但是其中需要思考和学习的知识点与细节值得深究。那废话不多说,撸起袖子就是干!!

一、实验介绍

1.1实验简介

本实验用50行左右代码完成图片转字符画小工具。通过本实验将学到Python基础知识,pillow库(主要是Image模块)的使用,Image模块的常用方法使用以及pycharm的简单操作。

1.2实验知识点

1.python基础

2.pillow库的使用

3.Image常用方法的使用

1.3实验环境

  • Windows10
  • Python3.5
  • Pycharm IDE

二、实验原理

首先,什么是字符画,就是一系列字符的组合,只不过恰好组成的形状是一幅可识别的图画(先上效果图,哒哒哒~~~~)

是不是感觉有那么一点意思,瞬间兴趣度爆满,那么就解释一下简单的原理:首先,每一张彩色的图片,之所以能够呈现出colorful或者dim的画面,只因为每一张图都由很多个像素点组成,而每一个像素点都有不同的颜色,而这个颜色就由三个值(rgb)对应三原色的百分比构成,所以每一个像素点都有三个值(rgb,范围0-255),那么我们就可以将每一个像素点转换成一个字符这样就能形成一个字符图画了。那么问题就来了,总共有256*256*256种颜色,可是我们不可能有有这么多种字符来一一对应啊,所以接下来就要引入新的概念:灰度值。

灰度值:指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像

rgb转换成灰度值公式:

gray=int(r*0.299+g*0.587+b*0.114)

也就是说通过这个公式瞬间将256*256*256的范围瞬间减少到0-255,有些人可能还会问,那我也没有256个单色字符去一一对应范围啊,这个时候不就可以灵活变通,将两到三个灰度值对应为一种字符不就ok了。

那么至于这个公式怎么来的或者怎么实现的,我们就不需要深究了,或者也可以去了解了解其中的算法,这里提供博客链接:

https://blog.csdn.net/xdrt81y/article/details/8289963

三、开发准备

原理解释完毕,接下来就是具体操作实现过程。

首先,需要一个第三方图像处理库PIL(Python Image Library)的下载,博主是在win10下开发的,所以需要下载该库,快捷键win+R输入cmd打开dos命令窗,输入:

pip install pillow

等待下载完即可,在python运行环境中import就好。但是在这里由于我们需要在pycharm中进行开发,所以我们还需要在pycharm中进行下载包:

下载好以后就可以安心的开始写代码导库了,但是在写代码之前,你一定有疑问,这个pillow库是干嘛的,应该要怎么用(我当时就是这么想的,哈哈哈~~),那我就简单讲解下这个项目所需要的知识点部分(更详细的可以自行百度)

四、简单介绍pillow库

1.要想简单了解pillow库,就需要简单了解下一些相关基本概念:

  • 通道(bands):每张图片由一个或多个数据通道构成,例如常见的rgb图像,每张图片都由三个数据通道构成,即R、G和B通道,而上面说的灰度图像只有一个通道。获取图片的通道方法是:getbands(),以元组数据类型返回。
  • 模式(mode):图像的模式定义了图像的类型和像素的位宽,有一些常见模式:

1:1位像素,表示黑和白,但是存储的时候每个像素存储为8bit。

L:8位像素,表示黑和白。

P:8位像素,使用调色板映射到其他模式。

RGB:3x8位像素,为真彩色。

RGBA:4x8位像素,有透明通道的真彩色。

CMYK:4x8位像素,颜色分离。

YCbCr:3x8位像素,彩色视频格式。

I:32位整型像素。

F:32位浮点型像素。

可以通过Image.made返回图片模式

  • 滤波器:将多个输入像素映射为一个输出像素的几何操作(比较复杂,做个参考就好)

2.其中Image模块中的常用方法:

  • Image.save("save.gif","GIF")  #保存为GIF格式,至于前一个参数是保存路径,如果不写绝对路径自动保存在当前文件夹下
  • Image.new(mode,size,color)  #创建新图片

注意保存时是new创建图片对象,再用对象的save方法保存

  • Image.conver("RGBA")  #图像类型转换
  • Image.size  #返回的是一个二元组,即该图片的大小,size[0]为水平长,size[1]为竖直高
  • Image.getpixel((w,h))  #获取某个点的像素值(即rgb值),注意其参数是必须(wedith,height)不能换顺序!!!切记
五、代码参考
  • 代码简析:

首先第一行是导入pillow库和Image模块,第三行中变量codelib是一个字符串序列,而count变量为其长度;第6行开始到第20行是一个转换函数(该程序的灵魂):形参是文件对象,第8-9行是用于测试用的返回图片文件的模式和通道(前面概念所说的),以判断该图片是rgb模式还是rgba模式。接下来的双重for循环中表示对图片的像素点进行遍历,其中13-16行就是我加的一个图片模式的判断,防止变量在接收每个像素点的rgb值时出现indexerror(因为有一些图片是rgba模式,就是增加了一个透明度值,所以如果每次都是用r,g,b三个变量存储getpoxel()返回的值就会有溢出),第17行就是进行灰度值转换。而18行中字符串变量codePic则是用于存储所对应出来的字符,其中:codeLib[int(((count-1)*gray)/256)]

就是用于转换成codelib中字符索引;第19行:就是在图片每一次行遍历完后字符尾部添加“\t和\n”,用于return这个字符串列表时打印出来能够自动换行,而不是直接一行打印出来。22-29行就是文件的打开和写入了,soeasy!!

(可能讲的比较繁琐,完全是为新手着想,嘻嘻嘻~~~~)

写完代码,在pycharm中,ctrl+shift+F10,就可以在你相应目录下找到该txt文件打开就会发现:嘻嘻

Python--图片转字符画相关推荐

  1. python图片转字符画

    学习了下python图片转字符画,学习连接:Python 图片转字符画,觉得还挺有趣,不过图片的颜色和细节不能太多,不然效果比较差,代码如下: from PIL import Image import ...

  2. python 图片转字符画

    python 图片转字符画 项目介绍 本实验用 50 行 Python 代码完成图片转字符画小工具.通过本实验将学习到 Linux 命令行操作,Python 基础,pillow 库的使用,argpar ...

  3. 网页版 Python 图片转字符画

    原文:https://lwebapp.com/zh/post/python-image-to-ascii 需求 最近发现一个好玩的 Python 玩法,用 Python 将图片转为字符画,大多数都是本 ...

  4. Python图片转字符画,太好玩啦(46)

    小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生. 和猫妹学Python,一起趣味学编程. 今日主题 什么是字符画呢? 如何用Python将图片转为字符画? 我们先找一幅原画,比如 ...

  5. python项目实战:最简单的图片转字符画

    2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家一个基础的,且简单的Python图片转字符画的过程,python图像转字符画需要用到matplotlib.py ...

  6. python实现图片转字符画_Python实现图片转字符画的示例代码

    初学Python,在网上看到Python图片转字符画的教程,我也来尝试下. 首先我们要用到Python的PIL库的Image模块,PIL(Python Imaging Library)库是Python ...

  7. 图片转字符画(python)

    记录 python图片转字符画 使用盲文字符 效果图: from PIL import ImageimgSrc = 'test.jpg' chars = list("⣿⣷⣾⢿⡾⣮⣭⣝⣫⣥⡛⣏ ...

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

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

  9. python动态图片转字符画_GIF动态图,视频?都能用Python转换成字符画图像

    字符画是一种由字母.标点或其他字符组成的图画,它产生于互联网时代,在聊天软件中使用较多,本文我们看一下如何将自己喜欢的图片转成字符画. 静态图片 首先,我们来演示将静态图片转为字符画,功能实现主要用到 ...

  10. python动态图片转字符画_Python实现图片转字符画

    原博文 2018-05-17 13:18 − 一.任务描述   西普工程师想了解Python的命令行,以达到更好的对Python更深入的认知,打算利用argparse库实现图片转字符画的实验,结合Py ...

最新文章

  1. MATLAB_10-模式识别_
  2. 解决python2.7 UnicodeEncodeError报错
  3. 【vue】介绍一个vuejs 和 element 搭建的一个后台管理界面
  4. A. Many Equal Substrings(自己很水)
  5. 三、Go语言控制语句
  6. boost::mpl::sign相关的测试程序
  7. 加快网站访问速度--jquery.js
  8. 每天学习点--------第五天(2017-10-9) 摘要: 常用的集合
  9. Ubuntu16安装GTK+2.0教程
  10. asp.net core 系列之允许跨域访问2之测试跨域(Enable Cross-Origin Requests:CORS)
  11. python pdf转word
  12. Rickie的软件测试学习笔记-第四周
  13. 希望 线段树 01背包
  14. 文件后缀名怎么修改?文件不显示后缀名怎么办
  15. namp安装及官方使用手册翻译及注释5
  16. 扒视频/音效素材的方法
  17. 经济机器是怎样运行的 -- Ray Dalio
  18. 数据搜索的新战场,我们为什么需要向量数据库?
  19. 2020年COVID-19撤稿门系列:群魔乱舞,水军纷飞
  20. 初中计算机课堂游戏设计,如何设计初中信息技术课堂作业

热门文章

  1. 手心输入法皮肤制作技巧
  2. 行为树(Behavior Tree)
  3. 如何屏蔽 iOS 软件自动更新,去除更新通知和标记
  4. Linux内存管理(四):Jemalloc
  5. 动量模型回测——基于米矿ricequant的jupyter notebook平台
  6. 负数的二进制转换方法
  7. 马尔可夫模型 Markov Model
  8. DCDC电源芯片的引脚功能及应用-BUCK芯片和BOOST芯片
  9. 2021年计算机保研总结(北师大+山大+大连理工+东北大学+信工所+哈工大+北航)
  10. dell h330 不要做raid5 ,做raid0就可以了