实现的效果:

                                                                                                             
 
需要掌握的知识:
1):Python的基础知识
2):argparse库
3):piilow的Image
 
#encoding=utf-8

from PIL import Image
import argparse #<--------------命令行输入参数处理----------------> #创建解析对象
parser = argparse.ArgumentParser() #在创建的对象中添加关注的命令行参数和选项
parser.add_argument('file') #输入文件
parser.add_argument('-o','--output') #输出文件
parser.add_argument('--width',type = int,default = 80) #输出字符画的宽度
parser.add_argument('--height',type = int,default = 80) #输出字符画的高度 #调用parse_args()方法进行解析
args = parser.parse_args() #使用
IMG = args.file
WIDTH = args.width
HEIGHT = args.height
OUTPUT = args.output #<-----------------处理图片--------------> ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") #字符与RGB的对应的映射关系
def get_char(r,g,b,alpha=256):
if alpha == 0 :
return ' '
lenght = len(ascii_char)
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
unit = (256.0 + 1)/lenght
return ascii_char[int(gray/unit)] #如果是自己执行的话,就执行下面的,如果是作为导入模块就不执行
if __name__ == '__main__':
im = Image.open(IMG)
#这里是转换图片的大小,然后第二个参数表示图片的质量,一共有4种,低质量Image.NEARSET,双线性Image.BILINEAR,三次样条插值Image.BICUBIC,高质量Image.ANTIALIAS
im = im.resize((WIDTH,HEIGHT),Image.NEAREST)
txt = "" for i in range(HEIGHT):
for j in range(WIDTH):
#im.getpixel:根据坐标取得RGB对应的r,g,b三个值,这里的getpixel((i,j))的两个括号非常重要
txt += get_char(*im.getpixel((j,i)))
txt += '\n' print txt #字符输出到文件
if OUTPUT:
with open(OUTPUT,'w') as f:
f.write(txt)
else:
with open("output.txt",'w') as f:
f.write(txt)
 
总结:
1:argparse命令行参数处理的使用过程
      1):创建解析对象  parser = argparse.ArgumentParser()
      2):在创建的对象中添加你所关注的命令行参数和选项   parser.add_argument()
      3):调用parse.args()方法进行解析
      4):使用
 
2:im = im.resize((WIDTH,HEIGHT),Image.NEAREST) 这里的resize()是转换像素的意思,第二个参数表示转换的质量
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

第一个Python小项目:图片转换成字符图片的更多相关文章

  1. 使用nvDXT.exe把图片转换成dds图片【转】

    从nvidia官网下载工具包DDS Utilities [https://developer.nvidia.com/legacy-texture-tools] 转换图片格式需要的工具是 nvdxt.e ...

  2. java将白色背景图片转换成透明图片

    package evecom.image; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.Buffe ...

  3. Python将GIF图片转换成png图片帧

    效果图: 转换之后保存到文件夹中: 代码如下:(第三方库pillow,安装方法:在cmd中输入:  pip install pillow) from PIL import Image import o ...

  4. C#将图片转换成字符画

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

  5. 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果

    去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟 ...

  6. [转] 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果 ---张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3804 去年盛夏之时, ...

  7. 小tip: 使用CSS将图片转换成黑白(灰色、置灰)[转]

        小tip: 使用CSS将图片转换成黑白(灰色.置灰) 这篇文章发布于 2012年08月19日,星期日,20:41,归类于 css相关, SVG相关. 阅读 159943 次, 今日 146 次 ...

  8. 用Python将word文件转换成html(转)

    用Python将word文件转换成html   序 最近公司一个客户大大购买了一堆医疗健康方面的科普文章,希望能放到我们正在开发的健康档案管理软件上.客户大大说,要智能推送!要掌握节奏!要深度学习!要 ...

  9. 使用CSS将图片转换成黑白(灰色、置灰)z转

    小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.c ...

随机推荐

  1. 如何插入谷歌地图并获取javascript api 秘钥--Google Maps API error: MissingKeyMapError

    参考:https://blog.csdn.net/klsstt/article/details/51744866 Google Maps API error: MissingKeyMapError h ...

  2. echarts tooltip巧用

    tooltip : { trigger: 'item', triggerOn: 'click', formatter:function(params,ticket,callback){ var res ...

  3. day048 BOM和DOM

    BOM   Browser Object Model(文档对象模型) > window对象 1.alert     弹出带有提示和一个确认按钮的警示框 2.confirm       弹出带有一 ...

  4. [poj P1141] Brackets Sequence

    [poj P1141] Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K   Special Judge Description ...

  5. ES6--闭包数组i的值与var的作用域理解

    var a = [];for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); };}a[6](); // 10 变 ...

  6. Win10下安装zio

    0x00 报错:capstone.dll缺失,就算用pip安装也不行. 推荐:kali下安装pwn,pwntools,zio

  7. Binary Tree Maximum Node

    Find the maximum node in a binary tree, return the node. Example Given a binary tree: 1 / \ -5 2 / \ ...

  8. useradd语法2

    在Linux中 useradd 命令用来创建或更新用户信息. useradd 命令属于比较难用的命令 (low level utility for adding users),所以 Debian 系的 ...

  9. Element分页组件prev-text和next-text属性无效?

    前情提要 /(ㄒoㄒ)/~~ 作为刚刚接触 Element 组件的人来说,看文档是第一步,但是当我想要修改分页组件里面的按钮时却遇到了问题. 文档中写到是需要给 prev-text 和 next-te ...

  10. TCP/IP笔记(1)

    TCP/IP 背景和介绍 上世纪 70 年代,随着计算机技术的发展,计算机使用者意识到:要想发挥计算机更大的作用,就要将世界各地的计算机连接起来.但是简单的连接是远远不够的,因为计算机之间无法沟通.因 ...