前言
先来看看成品
放大看就知道这是由一个个字符组成的“图片”
如何通过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