内容简介:今天给大家介绍一个段有趣的代码将图片生成用文字组成的图案。看过B站那些文字组成的跳舞小姐姐的GIF吗?用这段代码你可以自己做出来。GIF我就懒得做了,作为一个后端程序员,不是太有耐心一帧一帧截图,大家可以先看看把图案文本贴在VScode里的效果
今天给大家介绍一个段有趣的代码
将图片生成用文字组成的图案。看过B站那些文字组成的跳舞小姐姐的GIF吗?用这段代码你可以自己做出来。
GIF我就懒得做了,作为一个后端程序员,不是太有耐心一帧一帧截图,大家可以先看看把图案文本贴在VScode里的效果
直接上码,说明都在代码中
/*先定义一个函数 参数: imgPath: 图片路径 size: 生成文本后的尺寸(这个不是真实的尺寸,1代表1个像素,1个像素会被替换成1个字符,所以是字符的个数,高度是自动换算的,所以这里的size指的是“宽度”被压缩成多少像素) txts: 将像素处理成的字符列表 rowend: 换行字符(因为windows和 linux 不同) output: 生成文本文件保存路径 */ func img2txt(imgPath string, size uint, txts []string, rowend string, output string) { //获取图片文件 file, err := os.Open(imgPath) if err != nil { fmt.Println(err.Error()) return } defer file.Close() //用图片文件获取图片对象 img, err := png.Decode(file) if err != nil { fmt.Println(err.Error()) return } //用将宽度设置为size,然后换算出等比例的高度 var width = size var height = (size * uint(img.Bounds().Dy())) / (uint(img.Bounds().Dx())) height = height * 6 / 10 //这里6/10是大致字符的宽高比 newimg := resize.Resize(width, height, img, resize.Lanczos3) //根据高宽resize图片,并得到新图片的像素值 dx := newimg.Bounds().Dx() dy := newimg.Bounds().Dy() //创建一个字节buffer,一会用来保存字符 textBuffer := bytes.Buffer{} //遍历图片每一行每一列像素 for y := 0; y < dy; y++ { for x := 0; x < dx; x++ { colorRgb := newimg.At(x, y) r, g, b, _ := colorRgb.RGBA() //获得三原色的值,算一个平均数出来 avg := uint8((r + g + b) / 3 >> 8) //有多少个用来替换的字符就将256分为多少个等分,然后计算这个像素的平均值趋紧与哪个字符,最后,将这个字符添加到字符buffer里 num := avg / uint8(256/len(txts)) textBuffer.WriteString(txts[num]) fmt.Print(txts[num]) //打印出来 } textBuffer.WriteString(rowend) //一行结束,换行 fmt.Print(rowend) } //将字符buffer的数据写入到文本文件里,结束。 f, err := os.Create(output + ".txt") if err != nil { fmt.Println(err.Error()) return } defer f.Close() f.WriteString(textBuffer.String()) }
然后,在main函数里
func main() { img2txt("你的图片.png", 200, []string{"@", "#", "*", "%", "+", ",", ".", " "}, "\n", "./保存的文本.txt") }
搞定!!!
go run main.go
试试看,打开刚才保存的文件看看效果
喜欢让朋友惊讶的你, 可以用他们的照片做一个文本图片啦、跳舞小姐姐的文字啦、代码里放有图案的注释啦....
猜猜她是谁?
喜欢的同学可以加我的公众号,和大家一起发现一起学习编程的乐趣
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 黄仁勋现场秀AI跳舞!联合美团打造无人外卖车
- 用 Python 写个七夕表白神器
- 代码截图,也许是今年最个性的表白姿势了
- 520 | 程序员10分钟硬核表白教程!
- “钢铁直猿”专属,5·20硬核表白方式三连击
- 炫酷粒子表白 | 听说女神都想谈恋爱了!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解LINUX内核(第三版)
(美)博韦,西斯特 / 陈莉君;张琼声;张宏伟 / 中国电力出版社 / 2007-10-01 / 98.00元
为了彻底理解是什么使得Linux能正常运行以及其为何能在各种不同的系统中运行良好,你需要深入研究内核最本质的部分。内核处理CPU与外界间的所有交互,并且决定哪些程序将以什么顺序共享处理器时间。它如此有效地管理有限的内存,以至成百上千的进程能高效地共享系统。它熟练地统筹数据传输,这样CPU 不用为等待速度相对较慢的硬盘而消耗比正常耗时更长的时间。 《深入理解Linux内核,第三版》指导你对内核......一起来看看 《深入理解LINUX内核(第三版)》 这本书的介绍吧!