zoukankan      html  css  js  c++  java
  • python学习---50行代码实现图片转字符画1

    转自:https://blog.csdn.net/mm1030533738/article/details/78447714

    项目链接: https://www.shiyanlou.com/courses/370/labs/1191/document


     

    from PIL import Image   #从PIL模块中引入Image这个类
    import argparse   #引入argparse这个模块(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的列表,让图片上的灰度与字符相对应

    ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!1I;:,"^`'.")

    #将256灰度映射到70个字符上

    def get_char(r,g,b,alpha = 256):   #这个调用跟im.getpixel函数有关,这个函数是根据图片的横纵坐标,把图片解析成

                      #r,g,b,alpha(灰度)

      if alpha == 0:  #如果灰度是0,则说明这里没有图片
      return ' '
      length = len(ascii_char)  #计算这些字符的长度
      gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)  #把这些图片的RGB值转换成灰度值
      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)))  #把图片按照横纵坐标解析成RGBAlpha这几个参数,然后调用get_char

                            #函数,把对应的图片转换成灰度值,把对应值的字符存入txt中
          txt += ' '
        print(txt)  #在界面打印txt文件

      if OUTPUT:
        with open(OUTPUT,'w') as f:  #文件输出
        f.write(txt)
      else:
        with open("xx.txt",'w') as f:  #文件输出
        f.write(txt)

  • 相关阅读:
    poj 3068 Bridge Across Islands
    XidianOJ 1086 Flappy v8
    XidianOJ 1036 分配宝藏
    XidianOJ 1090 爬树的V8
    XidianOJ 1088 AK后的V8
    XidianOJ 1062 Black King Bar
    XidianOJ 1091 看Dota视频的V8
    XidianOJ 1098 突击数论前的xry111
    XidianOJ 1019 自然数的秘密
    XidianOJ 1109 Too Naive
  • 原文地址:https://www.cnblogs.com/hangzhi/p/9043114.html
Copyright © 2011-2022 走看看