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)

  • 相关阅读:
    【leetcode刷题笔记】Merge Intervals
    【leetcode刷题笔记】Implement strStr()
    【leetcode刷题笔记】Rotate List
    【leetcode刷题笔记】Merge k Sorted Lists
    【leetcode刷题笔记】Longest Substring Without Repeating Characters
    【leetcode刷题笔记】Scramble String
    【leetcode刷题笔记】Anagrams
    【leetcode刷题笔记】Distinct Subsequences
    【leetcode刷题笔记】Remove Duplicates from Sorted List II
    结语与感悟
  • 原文地址:https://www.cnblogs.com/hangzhi/p/9043114.html
Copyright © 2011-2022 走看看