本文由作者本人转载至天云论坛
先来看看成品

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

如何通过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艺术生成器,可以将普通的图片转换为字符表示的生成器就完成了(成果如前面所示)。 基于这个改编,我借助了一点点,真的就一点点(¬︿̫̿¬☆)Ai的力量把它改写成了网页: 使用surge部署了: https://asciipic.surge.sh/ 如果你有兴趣可以自行下载它的源码,这里就不占用论坛资源了。整体使用js来处理,但是代码真的很烂。。 在输出区因为宽度原因可能无法正常显示,可以复制到记事本里。 实地应用的话,,,大概就是美化吧。 在我的道法历史网上也有半自动化部署的应用: 因为surge静态的限制,之前我只能每天重新制作网页并且上传,现在有了surge+note.ms+ASCII(主要是为了更清晰的展现),就可以实现一次上传,长久运行。 怎么样?至少看着还不错吧doge
|