有一些很好的免费“图像到ASCII艺术”转换网站,如下所示:ASCII-art.org
这种图像转换算法如何工作?
, . W , W W @ W ,W W , W, :W* .W . # WW @WW WW # W WW.WWW WW: W W. WW*WWW# WW@ W * :WW.WWWWWWW@WWW@W # +* #WW#WWWWWWWWWWWWW# W W# @WWWWWWWWWWWWWWWWW W WW WWWWWWWWWWWWWWWWWW W WW WWWWWWWWWWWWWWWWWW@W# ,WW.WWWWWWWWWWWWWWWWWWWWW WW@WWWWWWWWWWWWWWWWWWWWW : WWWWWWWWWWWWWWWWWWWWWWWW : @ WWWWWWWW@WWWWWWW@@WWWWWW. W*WWWWWW::::@WWW:::::#WWWWW WWWWWW@:: :+*:. ::@WWWW WWWWW@:*:.:: .,.:.:WWWW @WWWW#:.:::. .:: #:@WWW :WWW@:#. :: :WWWW:@WWWW WWW#*:W@*@W . W:#WWW #WWWW:@ :: :: *WWWW W@WW*W .::,.::::,:+ @@WW#, WWWW## ,,.: .:::.: . .WWW:, @WWW@: W..::::: #. :WWWW WWWW:: *..:. ::.,. :WWWW WWWW:: :.:.: : :: ,@WW@ WWWW: .:, : ,, :WW, .: # : , : * W + ., ::: ., : @ W :: .: W @,,,W:. ,, ::*@*:, . :@W.,,@ +.....*: : : .#WWWWW: : .#:....+, @...:::*:,, : :WWWWWWW, , *::::..,# :...::::::W:, @W::::*W. :W:::::...# @@@@@@@@@@@W@@@@@W@@@@@@W@@@@@W@@@@@@@@@@:
答案 0 :(得分:92)
大画面概念很简单:
每个可打印字符都可以分配一个近似的灰度值;例如,“at”符号@
在视觉上明显比“加号”符号+
更暗。效果会有所不同,具体取决于实际使用的字体和间距。
根据所选字体的比例,将输入图像分组为具有恒定宽度和高度的矩形像素块(例如,矩形4像素宽,5像素高)。每个这样的块将成为输出中的一个字符。 (使用刚刚提到的像素块,240w-x-320h图像将变为64行,每行60个字符。)
计算每个像素块的平均灰度值。
对于每个像素块,选择一个灰度值(来自步骤1)是像素块平均值的良好近似值的字符(从步骤3开始)。
这是最简单的练习形式。更复杂的版本还将在打破像素块的候选者之间的关系时考虑字符的实际形状。例如,“斜杠”(/
)对于像素块看起来比左下到右上更好的选择比“反斜杠”(\
)更好。对比度特征。
答案 1 :(得分:16)
aalib(2001年最后一个版本)是一个开源的ASCII艺术库,用于mplayer等应用程序。您可能想查看其源代码以了解它是如何做到的。除此之外,this page更详细地描述了这些算法的工作原理。
答案 2 :(得分:12)
另外,您可以查看libcaca
(最新发布的2014年版),根据其网站对aalib
进行了以下改进:
答案 3 :(得分:7)
我发现这个CodeProject article written by Daniel Fisher包含一个简单的 C#实现图像到ASCII艺术转换算法。
这些是程序/库执行的步骤:
很简单,不是吗?
BTW:在文章的评论中,我发现了这个很酷的AJAX实现:Gaia Ajax ASCII Art Generator:
[...]我觉得有必要证明 它很容易在一个 标准化的Web技术集。 我开始看看能不能找到一些 图书馆使用,我找到了范凡 李的代码项目关于他的文章 ASCII fying .NET库。
P.S。:Lucas(见评论)发现了另一个CodeProject article。