pycharm中将图片转化成字符画

PyCharmIDE: 给脚本传递参数

设置的地方:

Run/Debug Configurations->Configurations->Script Parames

和vs类似,都不用输入程序名字,直接输入参数即可。

如,在命令行中需要输入 python a.py b c d

则在上述地方直接输入 b c d就行了


1.设计思路

如何把以.png的图片以不同字符把它形象的画出来呢?
我们知道其实一张图片是由很多不同像素点所组成的,每种像素点可以表示一种颜色。那么如果我们用不同的字符来代替各种像素点,是不是就可以将图片转化为字符画了?没错就是要用这个原理

2.需做的准备

为了实现我们本片博文所述的功能,不许得有一个叫做Pillow(PIL)的图像处理库
该库的安装方式如下

pip install pillow
 
 
  • 1
  • 1

我们今天所要使用的是该库中的Image模块.。其中会用到一个很重要的概念-灰度值(由图形颜色的深浅来决定)

关于Image模块的详细用法请戳http://www.cnblogs.com/apexchu/p/4231041.html

3.代码实现

#! /usr/bin/python
#coding:utf8

import argparse
from PIL import Image

def handle_command():
    '命令行参数处理'
    parser = argparse.ArgumentParser()
    parser.add_argument('filename',help = '图片的路径')
    parser.add_argument('-o','--output',help = '是否输出文件')
    parser.add_argument('--width',type = int,default = 80)
    parser.add_argument('--heigth',type = int,default = 80)

    #获取命令行参数
    return parser.parse_args()

args = handle_command()

class Ptrancefrom(object):
    '实现将图片转化为字符'
    def __init__(self,img,width,heigth):
        self.img = img
        self.width = width
        self.heigth = heigth
        self.ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")

    def get_char(self,r,b,g,alpha = 256):
        '将256范围的灰度值映射到70个字符上'
        #灰度值为0时对应字符为空格
        if alpha == 0:
            return ' '

        length = len(self.ascii_char)
        #灰度值的计算公式
        gray = int(0.2126 *r + 0.7152*g + 0.0722*b)

        unit = (256.0 + 1)/length
        return self.ascii_char[int(gray/unit)]

    def print_picture(self):
        '打印图形'
        #打开图片
        im = Image.open(self.img)
        #设置图片像素的大小
        im = im.resize((self.width,self.heigth),Image.NEAREST)

        txt = ""

        for i in range(self.heigth):
            for j in range(self.width):
                txt += self.get_char(*im.getpixel((j,i)))

            txt += '\n'

        print txt

    def write_to_file(self):
        '将生成的字符图片写入到文件'
        if args.output:
            with open(args.output,'w') as f:
                f.write(txt)
        else:
            with open('output.txt','w') as f:
                f.write(txt)

pic = Ptrancefrom(args.filename,args.width,args.heigth)

pic.print_picture()


运行上述脚本

python prog3.py --width 45 --heigth 45 ascii_dora.png


选材的图片原图如下
这里写图片描述


代码二:

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)
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;:,\"^`'. ")
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)/length
    return ascii_char[int(gray/unit)]
if __name__ == '__main__':
    im = Image.open(IMG)
    im = im.resize((WIDTH,HEIGHT), Image.NEAREST)
    txt = ""
    for i in range(HEIGHT):
        for j in range(WIDTH):
            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)

效果:


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值