You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Shell中打印图像?技术实现思路与工具推荐请求

在Python Shell中打印图像的实现思路与工具推荐

核心实现思路

要在Shell中打印图像,本质是将图像像素的亮度/颜色信息映射为终端可识别的字符(或带ANSI颜色的字符),具体步骤如下:

  • 调整图像尺寸:由于终端字符的宽高比约为1:2,建议将图像高度压缩为原高度的1/2,避免图像纵向拉伸变形。
  • 灰度化(可选):如果只需要灰度效果,将图像转为灰度模式;若要彩色输出,则保留RGB通道信息。
  • 像素-字符映射:用不同密度的字符对应不同亮度(比如空格 代表最暗,█代表最亮,中间用.、-、*、#等过渡);彩色场景则结合ANSI颜色代码给字符上色。
  • 逐行拼接字符并打印。

手动实现示例

先修正你原来的图像读取代码(修复路径硬编码和语法错误),再添加转换打印逻辑:

from PIL import Image

def get_image(file_path):
    img = Image.open(file_path)
    return img

# 定义字符集,密度从低到高
CHAR_SET = " .:-=+*#%@"

def img_to_ascii(img, width=80):
    # 按比例调整尺寸,修正字符宽高比
    aspect_ratio = 0.5
    new_height = int(width * aspect_ratio * img.height / img.width)
    img_resized = img.resize((width, new_height))
    img_gray = img_resized.convert("L")  # 转灰度图
    
    ascii_str = ""
    for y in range(new_height):
        for x in range(width):
            pixel = img_gray.getpixel((x, y))
            # 将0-255的亮度值映射到字符集索引
            char_index = int(pixel / 255 * (len(CHAR_SET)-1))
            ascii_str += CHAR_SET[char_index]
        ascii_str += "\n"
    return ascii_str

if __name__ == "__main__":
    path = input("Please enter path to image: ")
    img = get_image(path)
    print(img_to_ascii(img))

现成工具推荐

如果不想手动实现,直接用成熟的Python工具库更高效:

  • ascii-image-converter:支持将图像转为灰度/彩色ASCII字符,可自定义字符集和输出尺寸,支持命令行调用或Python API集成。
  • pillow-ansi:基于Pillow扩展,直接将图像转为带ANSI颜色代码的字符流,能在支持彩色的终端显示彩色图像。
  • term-image:专门针对终端图像显示优化,支持JPG/PNG/GIF等格式,甚至能显示动图,提供丰富的参数调整显示效果。

更新说明

问题已解决,通过上述手动实现思路或推荐的工具库,均可完成在Python Shell中打印图像的需求。

内容的提问来源于stack exchange,提问作者5rod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:42:51