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

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

内容简介:今天给大家介绍一个段有趣的代码将图片生成用文字组成的图案。看过B站那些文字组成的跳舞小姐姐的GIF吗?用这段代码你可以自己做出来。GIF我就懒得做了,作为一个后端程序员,不是太有耐心一帧一帧截图,大家可以先看看把图案文本贴在VScode里的效果

今天给大家介绍一个段有趣的代码

将图片生成用文字组成的图案。看过B站那些文字组成的跳舞小姐姐的GIF吗?用这段代码你可以自己做出来。

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

Go有趣,5.20用 <a href='https://www.codercto.com/topics/6127.html'>Go</a> 做一个表白图/让文字跳舞

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

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

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

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

猜猜她是谁?

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

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

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


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

查看所有标签

猜你喜欢:

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

智能Web算法(第2版)

智能Web算法(第2版)

【英】Douglas G. McIlwraith(道格拉斯 G. 麦基尔雷思)、【美】Haralambos Marmanis(哈若拉玛 玛若曼尼斯)、【美】Dmitry Babenko(德米特里•巴邦科) / 达观数据、陈运文 等 / 电子工业出版社 / 2017-7 / 69.00

机器学习一直是人工智能研究领域的重要方向,而在大数据时代,来自Web 的数据采集、挖掘、应用技术又越来越受到瞩目,并创造着巨大的价值。本书是有关Web数据挖掘和机器学习技术的一本知名的著作,第2 版进一步加入了本领域最新的研究内容和应用案例,介绍了统计学、结构建模、推荐系统、数据分类、点击预测、深度学习、效果评估、数据采集等众多方面的内容。《智能Web算法(第2版)》内容翔实、案例生动,有很高的阅......一起来看看 《智能Web算法(第2版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具