将图片转为ASCII字符画

原文:将图片转为ASCII字符画

Copyright 2012 Conmajia

源代码下载:点击这里

什么是字符画?就是用ASCII字符来近似组成图像,就像这样:

  ╭╮       ╭╮  
 ││       ││  
╭┴┴———————┴┴╮
│           │   
│           │   
│ ●       ● │
│○  ╰┬┬┬╯  ○│
│    ╰—╯    │ 
╰——┬O———O┬——╯
   ╭╮    ╭╮    
   ╰┴————┴╯ 

还有复杂点的:

﹎ ┈ ┈ .o┈ ﹎  ﹎.. ○
﹎┈﹎ ●  ○ .﹎ ﹎o▂▃▅▆
┈ ┈ /█\/▓\ ﹎ ┈ ﹎﹎ ┈ ﹎
▅▆▇█████▇▆▅▃▂┈﹎
 
                    .----.
                 _.'__    `.
             .--(#)(##)---/#\
           .' @          /###\
           :         ,   #####
            `-..__.-' _.-\###/
                  `;_:    `"'
                .'"""""`.
               /,  野比 ,\
              //  很穷!  \\
              `-._______.-'
              ___`. | .'___
             (______|______)

今天要做的就是把一副图片(卡通动画,照片)转换成类似这样的效果。

相信很多人都做过,我这里就简单提一下。

基本思想就是用不同“亮度”的字符(每个字符有自己对应的视觉亮度)替换图片中对应亮度的那些部分,最后形成和原图亮度分布差不多的“看起来很像”的字符画。
核心代码很简单,不到50行。为了图方便我没有把原图切块后的Blob保存下来,这个供大家自行发挥。
注意其中用到了FastBitmap,这个增强Bitmap类以前我发的代码里也有,用来稍微加快下处理速度。如果觉得不方便,直接删除带有「fast」的语句就可以,不用做其他修改。

 1 public static string Generate(Bitmap img, int rowSz, int colSz)
 2 {
 3     StringBuilder sb
 4         = new StringBuilder(
 5         img.Width / colSz * img.Height / rowSz
 6         );
 7     FastBitmap fast
 8         = new FastBitmap(
 9         img
10         );
11
12     fast.Lock();
13     for (int h = 0; h < img.Height / rowSz; h++)
14     {
15         int yoffset = h * rowSz;
16         for (int w = 0; w < img.Width / colSz; w++)
17         {
18             int xoffset = w * colSz;
19             int br = 0;
20
21             for (int y = 0; y < 10; y++)
22                 for (int x = 0; x < 10; x++)
23                     try
24                     {
25                         Color c = fast.GetPixel(
26                             x + xoffset,
27                             y + yoffset);
28                         br =
29                             br + (int)(c.GetBrightness() * 10);
30                     }
31                     catch
32                         br += 10;
33             br /= 10;
34             if (br / 5 < charset.Length)
35                 sb.Append(
36                     charset[br / 5]);
37             else
38                 sb.Append(' ');
39         }
40         sb.AppendLine();
41     }
42     fast.Unlock();
43
44     return sb.ToString();
45 }

其实最关键部分在于使用的调色盘,转换结果好不好,全靠Palette。不过由于时间关系,我随便弄了个对付对付。。
使用程序时先Load图片(注意别太大,如果太大,需要增大w和h来减少分块数量,否则会很慢)。然后设定好分块大小(单个块),最后点击「Generate」按钮。程序会在桌面上生成一个临时文件(HTML格式),并在浏览器中打开文件,供你查看结果。

下面是转换效果(可以看到糟糕的调色盘配置)

网上老外还有做成支持彩色的字符画,也是基于HTML表示,基本原理和这个差不多,各位可以自己玩玩看。。

你甚至还可以做成动画,就像这样。你懂的。

(完)

Copyright 2012 Conmajia

时间: 2024-11-05 12:18:47

将图片转为ASCII字符画的相关文章

Photoshop快速把鞋子图片转为黑白素描画

Photoshop快速把鞋子图片转为黑白素描画   原图 1.打开素材图片,把背景图层复制一层,执行:滤镜 > 风格化 > 照亮边缘. 2.参数设置如下图. 3.确认设置,注意描边线条不能太粗. 分类: PS入门教程

从零学python系列之教你如何根据图片生成字符画_python

说下思路吧: 原图->灰度->根据像素亮度-映射到指定的字符序列中->输出.字符越多,字符变化稠密.效果会更好.如果根据灰度图的像素亮度范围制作字符画,效果会更好.如果再使用调色板,对字符进行改色,就更像原图了. 这是原图:  这是生成的字符画: 废话不多说,直接上代码: 复制代码 代码如下: import Imagechars =" ...',;:clodxkLO0DGEKNWMM"fn=r'c:\users\liabc\desktop\jianbing.png'f

photoshop怎么把手机人物图片转为唯美的仿手绘

  photoshop怎么把手机人物图片转为唯美的仿手绘           最终效果 原图 1.打开素材图片,调整下图像大小(图像 > 图像大小),我的习惯是这样的 如果想画的细致 也可以调的更大. 2.下面是调色,调色神马的,表问我数值,真心不记数值的.用可选颜色调到一个满意的颜色就好;液化略微修下脸型,不圆滑的地方推推平,楼主是包子脸,硬是液化成锥子脸就太掉节操了;磨皮什么的就不多讲了.其实这货几乎转手绘都不磨皮,感觉不光滑的地方用画笔扫扫就好了. 3.下面一步是对于转手绘的童鞋来说是比较

Photoshop把可爱女孩图片转为粉色仿手绘教程

  ps教程          Photoshop把可爱女孩图片转为粉色仿手绘教程           最终效果 原图 1.打开原图素材,先将人物勾选出来,有很多方法不一一例举了.然后对皮肤进行磨皮调色,要有女孩粉嫩皮肤的感觉. 2.用画笔和涂抹工具画出深色的头发部分,再用钢笔勾出深色的头发丝,稍微模糊一下显得不要太生硬. 3.用钢笔画出比较亮的发丝,稍微模糊一下. 分类: PS图片处理

把古装人像图片转为轻手绘效果

把古装人像图片转为轻手绘效果 轻微仿手绘处理的时候细节部分不需要特别的刻画.不过处理的时候还是需要非常用心,需要把人物脸部及画面都处理得非常干净.   原图 最终效果 1.打开原图素材,新建图层,改模式为柔光,用柔角浅粉色画笔,涂抹脸部.如图. 2.新建图层,用同样的方法给唇上色. 3.用黑色小号画笔,画嘴角. 4.用涂抹工具,向内涂抹. 5.画唇线高光. 分类: PS图片处理

mfc-opencv将图片转为HSV时总是报错

问题描述 opencv将图片转为HSV时总是报错 if(m_pVideoInfo->m_pCapture){ IplImage* frame*src_image=NULL; frame = cvQueryFrame(m_pVideoInfo->m_pCapture); if(frame) { cvCopy(framem_pVideoInfo->m_pFrameImage); int i bin_w c; if(!m_pVideoInfo->m_pFrameImage) { m_pV

Facebook和Instagram正秘密创建用户上传图片的ASCII字符图形

有一项关于社交网络Facebook和Instagram的秘密近日被揭开了,据网友Mathias Bynens推文他发现了Facebook和Instagram均会在用户上传图片后,自动创建这些图片的ASCII字符图形版本.Facebook此做 法的用意不明,你可以非常简单的得到图片生成的ASCII码图像,这些字符图像的确非常酷. 在Facebook或Instagram上找一副公开发布的图片,复制图片的地址(最好地址以.jpg结尾这样有很大几率获得ASCII字符图像),将图片的地址粘贴进地址栏,并在

photoshop把图片转为模仿建筑景观蓝图效果教程

给各位photoshop软件的使用者们来详细的解析分享一下把图片转为模仿建筑景观蓝图效果的教程. 教程分享: 先看看最终效果:   01开一个小方形档案,我们要做蓝图的格子.边长依照你的照片大小而定   02 放大检视,利用 直线工具(1像素,蓝色)拉出L型.   03选择[编辑 - 定义图样],把这个蓝色L存成图样.   04开启你的景观照片,CTRL+J复?图层,选择[滤镜-风格化-寻找边缘].   05选择[影像-调整-色相/饱和度],勾"上色",并调整色相锚点至线条变成蓝色.

巧用搜狗输入法快速输入特殊字符与表情字符画

凭借出色的输入体验,搜狗拼音输入法可谓红遍网络,但凡使用拼音输入法的人,十有八九都听说过他的名字,从最初提出的互联网词库,精准的输入首选词让用户青睐有加,到后来个性化的皮肤.方便实用的特色功能则让用户爱不释手. 今天小编就向大家介绍搜狗输入法的一个即实用又个性的功能:"表情&符号"输入. 为什么说这个功能即实用又个性呢,因为它不仅涵盖了大量的特殊符号如标点.数字.数学.希腊符号等,还预置了几百款搜狗表情和字符画,在写文章做论文时能快速的输入需要的特殊字符,在聊天泡论坛时也可随手