炫酷的“ASCII艺术”图片

前言

先来看看成品

放大看就知道这是由一个个字符组成的“图片”

如何通过python快速生成呢?

代码

from PIL import Image
import tkinter as tk
from tkinter import filedialog

chars = ['▮', '▯', '.']


def resize_image(image, target_width=100):
    width, height = image.size
    aspect_ratio = height / width
    target_height = int(target_width * aspect_ratio * 0.66)
    return image.resize((target_width, target_height))


def convert_to_gray(image):
    return image.convert('L')


def get_pixels(image):
    return image.getdata()


def pixels_to_chars(pixels):
    return ''.join(chars[pixel_value // 100] for pixel_value in pixels)


def main(image_path):
    image = Image.open(image_path)
    resized_image = resize_image(image)
    gray_image = convert_to_gray(resized_image)
    pixels = get_pixels(gray_image)
    ascii_art = pixels_to_chars(pixels)

    # 分割并打印ASCII艺术
    ascii_lines = [ascii_art[i:i + 100] for i in range(0, len(ascii_art), 100)]
    for line in ascii_lines:
        print(line)


if __name__ == '__main__':
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口
    file_path = filedialog.askopenfilename()
    if file_path:
        main(file_path)

解析 

功能介绍


1.导入库:

PIL (Python Imaging Library): 用于图像处理。
tkinter: Python的标准GUI库,用于创建简单的图形用户界面。


2.定义字符集:

chars 是一个包含三个字符的列表,这些字符将用于表示图片的不同灰度级别。


3.函数功能:

resize_image: 调整图片的大小,使其宽度为100像素,并保持其原始的宽高比。
convert_to_gray: 将图片转换为灰度图像。
get_pixels: 获取灰度图像的像素数据。
pixels_to_chars: 将像素值转换为对应的字符。这里假设每个像素值的范围是0-255,因此通过pixel_value // 100可以将像素值大致分为3个区间,每个区间对应一个字符。
main: 主函数,负责读取图片、调整大小、转换为灰度、获取像素、转换为字符,并打印出来。


4.GUI部分:

使用tkinter库创建一个简单的文件选择对话框,允许用户选择一个图片文件。


5.运行:

当运行脚本时,它会弹出一个文件选择对话框,让用户选择一个图片文件。
选择文件后,它会读取文件,进行上述处理,并将结果以ASCII艺术的形式打印到控制台。

<!--这里只大概分为三个区间,有需要更层次分明的形式可以添加区间-->

结语 

这样,一个简单的ASCII艺术生成器,可以将普通的图片转换为字符表示的生成器就完成了(成果如前面所示)。

制作不易,暴点金币。

晚安( ̄o ̄) . z Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elanx4

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值