4.5.ASCII文本圖案的python實現

1.問題描述及思路

我是在<python極客編程>一書中看到的這个案例.

ASCII文本圖案是指一个僅由ascii字符構成的文本文件, 但藉由字符排列在視覺上實現了對圖像的簡化重現.

實現基于兩个前提: 一是將ascii字符按灰度進行有序排列, 這个工作已經由前人完成, 順序排列下文可見; 二是將圖片處理爲類似于素描繪畫的可用數值描述的灰度不同的色凷. 在這兩个基礎上, 對照圖像小凷的灰度尋找合適的字符表示, 最後將所有字符儲存起來, 即實現了圖像到文本的轉化.

本質是數學中代數對幾何的再描述.



2.實現代碼

# img2ASCII
import argparse
from pydoc import describe
import sys
from PIL import Image
import numpy as np

# ASCII文本預設的灰度級別, 以字符的線條密度區分, 70級更精細, 10級比較粗略
GRAYSCALE_70 = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{[}]?-_+~<>i!lI;:,\"^`'. "
GRAYSCALE_10 = "@%#*+=-:. "


def get_average_L(img):
    """計算小凷的平均亮度

    Args:
        img (PIL.Image.Image): 轉換後的灰度圖像
    """
    np_img = np.array(img)  # 將img轉換爲np數組
    # 計算並返回平均亮度
    weight, height = np_img.shape
    return np.average(np_img.reshape(weight*height))


def image2ascii(imgfile, cols, scale, gs):
    """轉換圖像到ASCII文本圖案

    Args:
        imgfile (.jpg等等): 待轉換的圖像
        cols (int): ASCII文本的列數
        scale (float): 字体寬高的縮放係數

    Returns:
        list: ASCII字符的二維數組
    """
    global GRAYSCALE_10, GRAYSCALE_70
    # 尺寸計算
    img = Image.open(imgfile).convert('L')  # 打開圖片並轉換爲灰度圖像, L表示luminace
    img_weight, img_height &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值