用Golang将图片转化成ASCII码

栏目: Go · 发布时间: 6年前

内容简介:在开始之前先看看最终效果:项目地址在这里:

用Golang将图片转化成ASCII码

在开始之前先看看最终效果:

用Golang将图片转化成ASCII码

项目地址在这里: https://github.com/qeesung/im... , 欢迎star

我们都知道图片是通过一个像素点矩阵组成的,每一个像素点都是有四个值,分别是R,G,B,A组成,其中RGB就是红色,绿区,蓝色,简称三原色,在计算机中取值从0-255,而A则是颜色的透明度,取值0.0-1.0。

用Golang将图片转化成ASCII码

我们现在要做的就是将一个彩色的图片转化成一个由ASCII组成的图片,换句话说,就是将RGBA像素点的矩阵转化成一个由字符组成的矩阵,必要的时候再给字符加上颜色就可以啦。

(R, G, B, A) (R, G, B, A) (R, G, B, A)        char1, char2, char3
(R, G, B, A) (R, G, B, A) (R, G, B, A)  -->   char4, char5, char6
(R, G, B, A) (R, G, B, A) (R, G, B, A)        char7, char8, char9

那么问题又来了,R,G,B的值都是从0-255的,而字符的数量是很有限的(一般我们只会用少数几个有限的字符来表示),那么我们如何将由多种组合的R,G,B映射到一个字符上呢?

convert(pixel) -> character

我们不妨将RGB值和透明度和在一起,算出一个总值权重W,然后将这个值W均分到不同的字符串上,这样就完成了像素点到字符的映射,就是这么简单。注意下面的可选字符串的从左往右" .,:;i1tfLCG08@"辨识度一次增加,或者辨识度依次减少,如果不这样做,那么图片识别出来效果可能不太行。

value := (r + g + b) * a / 255

// Choose the char options.Pixels = " .,:;i1tfLCG08@"
precision := float64(255 * 3 / (len(options.Pixels) - 1))
rawChar := options.Pixels[roundValue(float64(value)/precision)]

现在可以将像素转化为字符了,那么颜色怎么办?上面的操作好比只是把图片转化成了黑白的,然后把轮廓画出来来了,那么如何取颜色呢?

加颜色需要注意的是,现在的颜色不再是单单的颜色了,现在的颜色包含两块,一块是字符自身的颜色,即前景色,一块是字符的后面的颜色,即背景色。

我们这里不调整背景色,只渲染字符的前景色,即只渲染字符的颜色。

linux 终端中,是可以通过输出特殊字符来配置输出字符颜色的,拿着就好办了,只需用图片的RGB混合一下,输出颜色就可以了,我们这里用 http://github.com/aybabtme/rg...

func decorateWithColor(r, g, b uint64, rawChar byte) string {
    coloredChar := rgbterm.FgString(string([]byte{rawChar}), uint8(r), uint8(g), uint8(b))
    return coloredChar
}

用Golang将图片转化成ASCII码

更多源码细节可以看这里: https://github.com/qeesung/im... 欢迎star:clap:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

软件人才管理的艺术

软件人才管理的艺术

Michael Lopp / 罗小平 / 人民邮电出版社 / 201008 / 35.00元

本书作者具有15年的硅谷人才管理经验,他在博客上发表了大量探讨软件人才的管理之道的文章,深受读者欢迎。本书素材取自他的博客文章,用深入浅出的语言,讲述发人深思的道理,具有很强的现实操作性。 本书分为三大部分:“管理的箭袋”、“过程就是产品”、“你的其他版本”。前两部分分别讲述了人员与产品的管理,第三部分除了讨论管理之外,还讲述了如何有针对性地准备简历和电话面试,来提高自己面试成功的几率。书中......一起来看看 《软件人才管理的艺术》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具