用 Go 写了一个图片转字符画的小工具

2017-09-05 20:25:33 +08:00
 xrlin

看到一些群里发的字符画感觉挺有趣的,然后就想着自己做一个小工具将图片转为字符文本,刚好可以拿 go 来练手, 顺便熟悉下 go 的一些库,在做命令行版本后又做了一个网页版,同时编译打包为一个文件。

在线测试地址

GitHub, 提供了 windows、linux、osx 的可执行文件和源码,如果对图片处理或者代码有更好的建议,还请赐教。

使用方式:

命令行:

./bin/ascii_converter -image-path="./test.png"

# 获取参数帮助信息
./bin/ascii_converter -h
 -bg string
        The background of the ascii art image file.(Only useful when image-out i                                                                                            s true, red|gray|green|blue|black are available). (default "black")
  -characters string
        The chars in the value will be used to generate ascii art. (default "M80                                                                                            V1i:*|, ")
  -color string
        The color of the ascii font in image file.(Only useful when image-out is                                                                                             true, red|gray|green|blue|black are available). (default "gray")
  -image-out
        If set to true, will also output the ascii art to an image file
  -image-out-path string
        If imageOut is true, add this option to print the picture to file.
  -image-path string
        The path of the picture file(jpg/png).
  -image-url string
        The url of the picture file(jpg/png).
  -ip string
        The address to bind. (default "127.0.0.1:8080")
  -server
        Set true to enable web ui server
  -sub-height int
        The height of the piece of small rectangle (default 10)
  -sub-width int
        The width of the piece of small rectangle (default 10)

使用浏览器:

# 启动 http 服务
./bin/ascii_converter -server=true

启动 http 服务后通过浏览器访问 http://127.0.0.1:8080 可以通过 web 界面进行操作。

感觉用 go 来写一些小工具挺方便的,跨平台,而且静态资源文件可以通过 go-bindata 生成 go 源文件,可以和源码一起打包成一个可执行文件,直接一个文件就可以发布执行,不需要安装各种依赖,真爽!

放上一个转换后的例子:

2171 次点击
所在节点    Go 编程语言
15 条回复
zhs227
2017-09-05 20:55:21 +08:00
玩了一下,挺好玩的
forwind
2017-09-05 20:59:15 +08:00
IFoon
2017-09-05 21:00:29 +08:00
@forwind 作大死.
forwind
2017-09-05 21:05:20 +08:00
@IFoon 很酷啊
xrlin
2017-09-05 21:13:35 +08:00
@forwind 你这是要搞事情啊( ﹁ ﹁ ) ~→
kindjeff
2017-09-05 21:19:17 +08:00
lzhr
2017-09-05 21:38:49 +08:00
@kindjeff #6 真正的粉丝,就算是。。。
xrlin
2017-09-05 21:40:40 +08:00
@kindjeff 一颗赛艇
jakiepaper
2017-09-05 23:51:33 +08:00
@kindjeff 还是双马尾的...
Allianzcortex
2017-09-06 00:36:58 +08:00
star + 1
Allianzcortex
2017-09-06 01:06:48 +08:00
写的好棒~~计算 grp 这块我稍微测试了一下,用默认的字符集显示效果很好,但如果我随机生成 `dfadfafasfdasfdasdgasdassdlfalgsdjalskd`的话就无法认出来,还是取决于相同 /相近颜色的代码区分度公式啦
xrlin
2017-09-06 09:03:29 +08:00
@Allianzcortex 这个确实,并不能很好地将每个范围的像素点映射到一个或几个不相近的字符,如果使用重复的字符就更难处理了。
Allianzcortex
2017-09-06 11:56:50 +08:00
@xrlin 嗯,字符集不重复但区分度比较低或者太长的话显示效果也不好:D
Allianzcortex
2017-09-06 11:58:00 +08:00
@xrlin 顺便问一下,这个在线地址的域名是你买的吗还是?
xrlin
2017-09-06 12:17:18 +08:00
@Allianzcortex 自己买的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388419

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX