【问题标题】:How do ASCII art image conversion algorithms work? [closed]ASCII 艺术图像转换算法如何工作? [关闭]
【发布时间】:2010-09-28 12:51:46
【问题描述】:

有一些不错的免费“图像到 ASCII 艺术”转换网站,例如:ASCII-art.org

这样的图像转换算法是如何工作的?

, . , 万维@ ,W , W, :W* .W 。 #WW@WWWW# 万维网万维网:W W.WW*WWW#WW@W * :WW.WWWWWWW@WWW@W # +* #WW#WWWWWWWWWWWWWW# W W# @WWWWWWWWWWWWWWWWW 万维网万维网万维网万维网万维网 万维网万维网万维网万维网@W# ,WW.WWWWWWWWWWWWWWWWWWWW WW@WWWWWWWWWWWWWWWWWWWW : WWWWWWWWWWWWWWWWWWWWWWW : @WWWWWWW@WWWWWWW@@WWWWWW。 W*WWWWWW::::@WWW:::::#WWWW 万维网@:::+*:. ::@WWWW WWWWW@:*:.:: .,.:.:WWWW @WWWW#:.::::. .:: #:@WWW :万维网@:#。 :: :WWWW:@WWWW 万维网#*:W@*@W 。 :#WWW #WWWW:@ :: :: *WWWW W@WW*W .::,.::::,:+ @@WW#, WWWW## ,,.: .:::.: . 。万维网:, @WWW@: W..::::: #. :万维网 万维网:: *..:. ::.,. :万维网 WWWW:::.:.::::,@WW@ 万维网: .:, : ,, :WW, .: # : , : * W + ., ::: ., : @ W :: .: W @,,,W:。 ,, ::*@*:, . :@W.,,@ +.....*: : : .#WWWWW: : .#:....+, @...:::*:,, ::WWWWWWW, , *::::..,# :...::::::W:, @W::::*W。 :W:::::...# @@@@@@@@@@@W@@@@@W@@@@@@W@@@@@W@@@@@@@@@@:

【问题讨论】:

标签: algorithm ascii-art


【解决方案1】:

大图级的概念很简单:

  1. 可以为每个可打印字符分配一个近似的灰度值;例如,“at”符号@ 在视觉上明显比“加号”符号+ 更暗。效果会有所不同,具体取决于实际使用的字体和间距。

  2. 根据所选字体的比例,将输入图像分组为具有恒定宽度和高度的矩形像素块(例如,4 像素宽和 5 像素高的矩形)。每个这样的块将成为输出中的一个字符。 (使用刚才提到的像素块,一张 240w-x-320h 的图像将变成 64 行,每行 60 个字符。)

  3. 计算每个像素块的平均灰度值。

  4. 对于每个像素块,选择一个字符,其灰度值(来自步骤 1)是像素块平均值(来自步骤 3)的良好近似值。

这是最简单的练习形式。更复杂的版本在打破像素块候选者之间的联系时也会考虑字符的实际形状。例如,“斜线”(/)比“反斜线”(\)对于看起来具有从左下角到右上角对比度特征的像素块来说是更好的选择。

【讨论】:

  • 你能给出一个按黑暗顺序排列的角色样本列表吗?不管是哪个角色。我只想在终端中绘制快速等高线图。 10 就可以,越多越好 (stackoverflow.com/questions/15335412/…)
  • 您需要尝试使用您计划使用的字体,但这里是来自下面另一条评论 (codeproject.com/Articles/20435/…) 中提到的文章的(9 级)比例:BLACK = "@";木炭 = "#";深灰色 = "8";中灰 = "&";中=“o”;灰色 = ":";石板灰 = "*";浅灰色 = ".";白=“”;例如,您可以在“#”和“@”之间添加“W”,但终端使用的实际字体可能需要调整。
  • @splattne 这里simple example of mine approaches for this task in C++第一个和这个答案一样
  • 感谢您的解释!注意我根据你的详细帖子写了一个详细的教程:jonathan-petitcolas.com/2017/12/28/… :)
【解决方案2】:

aalib(最后一次发布于 2001 年)是一个开源 ASCII 艺术库,用于 mplayer 等应用程序。您可能想查看它的源代码以了解它是如何工作的。除此之外,this page 更详细地描述了此类算法的工作原理。

【讨论】:

    【解决方案3】:

    您还可以查看libcaca(2014 年最新版本),根据他们的网站,与aalib 相比,它具有以下改进:

    • Unicode 支持
    • 2048 种可用颜色(某些设备只能处理 16 种)
    • 彩色图像抖动
    • 高级文本画布操作(blitting、rotations)

    【讨论】:

    • :P 是的,但忽略图标和库的名称,代码不会发臭。顺便说一句,据我所知,VLCPlayer 使用这个库作为它的 ascii 输出。应该尝试用 ascii 看电影 :)) 很有趣
    • 并且还从网络摄像头作品中获取提要和渲染为 ascii
    【解决方案4】:

    我发现这个CodeProject article written by Daniel Fisher 包含一个简单的C# 实现图像到 ASCII 艺术转换算法。

    这些是程序/库执行的步骤:

    1. 将图像流加载到位图对象
    2. 使用 Graphics 对象对位图进行灰度化
    3. 循环遍历图像的像素(因为我们不希望每个像素有一个 ASCII 字符,我们每 10 x 5 取一个)
    4. 为了让每个像素影响生成的 ASCII 字符,我们循环它们并计算当前 10 x 5 块的亮度。
    5. 最后,根据计算出的数量为当前区块附加不同的 ASCII 字符。

    很简单,不是吗?

    顺便说一句:在文章的 cmets 中,我发现了这个 cool AJAX implementationGaia Ajax ASCII Art Generator:

    [...] 我觉得有必要展示 它可以很容易地完成 标准化的网络技术集。 我开始看看能不能找到一些 图书馆要使用,我找到了秀帆 Lee 关于他的 codeproject 文章 ASCII fing .NET 库。

    P.S.:Lucas(见 cmets)找到了另一个 CodeProject article

    【讨论】:

    猜你喜欢
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多