分享
  1. 首页
  2. 文章

Go有趣,5.20用Go做一个表白图/让文字跳舞

ZetaChow晓代码 · · 3342 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

今天给大家介绍一个段有趣的代码
将图片生成用文字组成的图案。看过B站那些文字组成的跳舞小姐姐的GIF吗?用这段代码你可以自己做出来。

GIF我就懒得做了,作为一个后端程序员,不是太有耐心一帧一帧截图,大家可以先看看把图案文本贴在VScode里的效果
img2txt

直接上码,说明都在代码中

/*先定义一个函数
参数:
 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

试试看,打开刚才保存的文件看看效果

喜欢让朋友惊讶的你,可以用他们的照片做一个文本图片啦、跳舞小姐姐的文字啦、代码里放有图案的注释啦....

猜猜她是谁?
image.png

喜欢的同学可以加我的公众号,和大家一起发现一起学习编程的乐趣
晓代码


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:ZetaChow晓代码

查看原文:Go有趣,5.20用Go做一个表白图/让文字跳舞

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3342 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏