首页 > 编程语言 >01-Python 图片转字符画

01-Python 图片转字符画

时间:2024-05-23 21:32:56浏览次数:28  
标签:字符 01 Python self 灰度 file Image 图片

from PIL import Image

"""
    将图片转换为字符画

    图片转字符画是将一张图片转换成由字符组成的图像,通常用于在命令行界面或者文本编辑器中显示。这个过程主要包括以下几个步骤:

    - 读取图片文件
    - 将图片转换为灰度图像
    - 调整图片的尺寸以适应字符画的宽度和高度
    - 将灰度值映射到字符集上,生成字符画


    参考链接:
     - [Image Module](https://pillow.readthedocs.io/en/stable/reference/Image.html)
     - https://blog.csdn.net/m0_73511684/article/details/137026540
     - https://zhuanlan.zhihu.com/p/687097277

    说明:
     - pip install PIL 安装不了,安装 Pillow,该库与PIL接口兼容,可以满足你的图像处理需求。导入使用 from PIL import Image
"""

class ASCIIart(object):
    def __init__(self, file):
        """
         - file图片文件的名字, 传入参数为文件名进行一个赋值方便后续调用, 
         - codelist用于存储字符集,用于替换每像素点的灰度值
         - img是PIL库中Image实例出来的对象,调用open方法打开文件file
         - count用于保存字符集的长度
        """
        self.file = file
        self.codelist = """$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. """
        self.img = Image.open(file)
        self.count = len(self.codelist)
 
    def get_char(self, r, g, b, alpha=256):
        """
        用来处理灰度值和字符集的关系
        :return:
        """
        if alpha == 0:
            return " "
        length = self.count  # 获取字符集的长度
        gary = 0.2126 * r + 0.7152 * g + 0.0722 * b  # 将RGB值转为灰度值
        unit = 265 / length
        return self.codelist[int(gary / unit)]
 
    def get_new_img(self):
        """
        用于处理图片是转换的字符画不至于失真
        :return:
        """
        w, h = self.img.size
        print(f"图片的原始宽度和高度为:{w},{h}")
        if not w or not h:
            pass
        else:
            if w <= 299 or h <= 299:
                w = int(w / 1.4)
                h = int(h / 1.4)
            if 300 <= w <= 500 or 300 <= h <= 500:
                w = int(w / 2)
                h = int(h / 2)
            if 500 < w < 1000 or 500 < h < 1000:
                w = int(w / 3.8)
                h = int(h / 3.8)
            if 1000 <= w or 1000 <= h:
                w = int(w / 10)
                h = int(h / 10)
            print(f"修改后图片的宽度和高度为:{w},{h}")
            """
                https://pillow.readthedocs.io/en/stable/handbook/concepts.html#filters
                
                Image.NEAREST: 低质量
                Image.BILINEAR: 双线性
                Image.BICUBIC: 三次样条插值
            """
            im = self.img.resize((w, h), Image.Resampling.LANCZOS)
            return im
 
    def get_str_img(self, im, output=None):
        """
        获取字符串图片
        :return:
        """
        w, h = im.size
        txt = ""
        for i in range(h):
            for j in range(w):
                txt += self.get_char(*im.getpixel((j, i)))
            txt += "\n"
        # 字符画输出到文件
        if output:
            with open(output, "w") as file:
                file.write(txt)
        else:
            with open("output/output3.txt", "w") as file:
                file.write(txt)
 
 
if __name__ == '__main__':
    file = "image/thing.jpg"
    img = ASCIIart(file)
    im = img.get_new_img()
    img.get_str_img(im)

 

标签:字符,01,Python,self,灰度,file,Image,图片
From: https://www.cnblogs.com/qk1314/p/18209379

相关文章

  • 给大家分享一套非常棒的python机器学习课程
    给大家分享一套非常棒的python机器学习课程——《AI小天才:让小学生轻松掌握机器学习》,2024年5月完结新课,提供配套的代码+笔记+软件包下载!学完本课程,可以轻松掌握机器学习的全面应用,复杂特征工程,数据回归,分类,算法的项目实战应用,以小学生的视角和知识储备即可学会。课程名字:AI小天才......
  • Pytorch-01 框架简介
    智能框架概述人工智能框架是一种软件工具,用于帮助开发人员构建和训练人工智能模型。这些框架提供了各种功能,如定义神经网络结构、优化算法、自动求导等,使得开发人员可以更轻松地实现各种人工智能任务。通过使用人工智能框架,开发人员可以更快速地开发和部署机器学习和深度学......
  • Python多线程案例分析
    接下来,我们将在之前的基础上进一步扩展多线程爬虫案例,增加以下功能:1.动态URL发现与添加:爬虫在解析页面时,能够发现并添加新的URL到队列中。2.设置请求头:模拟浏览器行为,设置请求头中的`User-Agent`。3.使用会话:使用`requests.Session()`对象来保持连接,提高效率。4.避免重......
  • ccf 201409-2 画图
    http://t.csdnimg.cn/uJ2u9试题编号:201409-2试题名称:画图时间限制:1.0s内存限制:256.0MB问题描述:问题描述在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色。下图给出了一个画了两个矩形的例子......
  • Python 将PowerPoint (PPT/PPTX) 转为HTML
    1.Python 将PowerPoint文档转为HTML格式要实现该转换,仅需加一个.ppt或.pptx文档,然后使用 Presentation.SaveToFile() 方法将其另存为HTML格式。fromspire.presentation.commonimport*fromspire.presentationimport*#加载PPT文档ppt=Presentation()ppt.L......
  • 利用Python训练手势模型代码
    importcv2ascvimportosimportnumpyasnpfromsklearn.decompositionimportPCAfromsklearn.model_selectionimporttrain_test_splitfromsklearn.svmimportSVCfromsklearn.treeimportDecisionTreeClassifierfromsklearn.neighborsimportKNeighborsClassifie......
  • python 基础习题3--数据类型和运算符
    1.  100/4+2*3 运行结果是 ()                    A、10B、81C、31D、50    E、31.02. Python 中的== 代表的是 (  )A、把左边的值赋值给右边;B、把右边的值赋值给左边 ;C、比较左右......
  • [Usaco2017 Open]Bovine Genomics 题解^&*^(
    不知道为啥,我死活想不到二分(楼下正解)所以,就有了这篇题解可以看到,这道题离暴力的距离只有一步!就是数组开不下!!小问答:数组开不下时,你会?A:mapB:优化代码C:gp_hash_table由于正在学hash,所以容易想到...tong[本来的下标%9999999]然后就玄学的过了。。。ACcode#include<bi......
  • python计算雨水含量(W)
     数据: #!usr/bin/envpython#-*-coding:utf-8-*-"""@author:Suyue@file:raincontent.py@time:2024/05/23@desc:"""importnumpyasnpimportpandasaspdimportxlwtimportmathdf1=pd.read_excel('20240510五原数浓......
  • python DataFrame之MultiIndex 的使用
    importpandasaspdimportpprintasp#嵌套列表arrays=[['a','a','b','b'],[1,2,1,2]]#创建MultiIndexindex=pd.MultiIndex.from_arrays(arrays,names=('letter','number'))#使用MultiInd......