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做一个表白图/让文字跳舞


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

查看所有标签

猜你喜欢:

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

Automate This

Automate This

Christopher Steiner / Portfolio / 2013-8-9 / USD 25.95

"The rousing story of the last gasp of human agency and how today's best and brightest minds are endeavoring to put an end to it." It used to be that to diagnose an illness, interpret legal docume......一起来看看 《Automate This》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具