最近需要为用户服务添加一些新功能,其中就包括在注册时根据用户昵称生成头像这一点。

由于用户服务是用golang写的,google来google去都只找到freetype一个比较简单好用的库,其他比如ImageMagicK之类api都过于低层不适合我们这样相对简单的图片生成需求。

那说干就干,在go freetype仓库里找了个 example 就开始撸。

首先将又长又臭的这个example重新组织为几个函数,再按照我的需求修改一些参数……(想知道重构后的代码时什么样的话,请直接下拉,查看我封装的类库仓库地址。)

撸了一下午之后得到了我想要的结果,先贴两张图给大伙瞧瞧。

(数字)

(英文)

(汉字)

由于这个小功能挺有意思,觉得以后会用到所以把它稍微封装了一下放到了仓库里——AvatarBuilder,点我访问

用法


首先安装:

go get -u github.com/ShiningRush/avatarbuilder

 

然后使用,代码片段如下(golang):

    // init avatarbuilder, you need to tell builder ttf file and how to alignment text
ab := avatarbuilder.NewAvatarBuilder("./SourceHanSansSC-Medium.ttf", &calc.SourceHansSansSCMedium{})
ab.SetBackgroundColorHex(colors[])
ab.SetFrontgroundColor(color.White)
ab.SetFontSize()
ab.SetAvatarSize(, )
if err := ab.GenerateImageAndSave("", "./out.png"); err != nil {
fmt.Println(err)
return
}

完整的例子可以在仓库的example里看到:点击查看

你可以按照你的需求设置头像的宽高以及字体大小和字体文件,需要注意的是,目前该库只实现了一个免费开源的字体文件——思源。

因为每个字体文件的宽高都有点差异,所以当你引入新的字体时也需要拓展一个新的算法来告诉如何生成居中的文字。

可以参考 calc 文件夹下的实现。

以上,希望对以后有相同需求的同学有帮助。

(很遗憾,最近在写go和python比较多,所以没有c#的实现版本,幸运的是,c#在图形处理方面的库本就不少,资料很全完全不用操心。)

教你用go freetype根据用户昵称生成头像的更多相关文章

  1. 微信小程序 获取用户昵称、头像

    前段时间微信小程序对获取用户昵称和头像方法进行了更新,网上很多的文章都已经不适用了,这里简单总结一下,首先,传统接口wx.getUserInfo的效果会弹出一个给用户的弹窗,需要用户授权,经过测试传统 ...

  2. mysql保存emoji表情(微信开发用户昵称..)

      java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for colum n 'name' at row 1 at c ...

  3. 随机生成游戏用户昵称(nodejs版本)(含机器人头像,金币等)

    1 前言 有时需要生成随机的用户(或机器人)昵称,头像,金币等,但又不想太生硬,可以现在网上爬一些常见昵称到文本中,然后读取出来,随机使用即可. 2 代码 var nickNameArr = []; ...

  4. mysql 微信用户昵称emoji 完整保存

    微信用户昵称现在丰富多样,一些个性的名称中经常包含有特殊字符,以及emoji表情.起先,我总以为MySQL只能保存纯文本数据.但其实mysql(5.7版本)已非常强大,完整保存微信用户昵称(emoji ...

  5. wechat4j获取用户昵称乱码修复

    项目对接微信公众号平台时,微信的官方给出的建议是使用wechat4j.官方建议的,自然心里踏实,但实际用起来时发现wechat4j埋有很多雷,最让人心烦意乱的就是中文乱码问题. 之前写过一篇为JAXB ...

  6. 微信开放接口获取用户昵称保存到MySQL中为空白

    微信昵称中包含emoji表情标签,某些标签是使用了4字节编码的UTF8. 而大多数MySQL数据库现在使用的是3字节UTF8编码,这样会导致保存为空,且不会提示失败. 解决方法有2个,一个是升级到My ...

  7. 04: Form 验证用户数据 & 生成html

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  8. 如何给Docker hub用户上传头像

    我第一次使用Docker hub时,觉得很奇怪,这个网站上面没有允许用户上传头像的地方. 后来经过研究才发现,需要用在Docker hub上注册用户的同一个邮箱到Gravatar这个网站上再注册一个账 ...

  9. 根据用户id生成一个唯一邀请码

    需求描述:根据用户id生成与之对应的唯一邀请码,范围为‘0-9A-Z’. 这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到 ...

随机推荐

  1. 【Oracle 12c】最新CUUG OCP-071考试题库(55题)

    55.(13-3) choose the best answer: Which statement is true regarding the SESSION_PRIVS dictionary vie ...

  2. 看个AV也中招之cve-2010-2553漏洞分析

    试想:某一天,你的基友给你了一个视频文件,号称是陈老师拍的苍老师的老师题材的最新电影.avi,你满心欢喜,在确定文件格式确实为avi格式后,愉快的脱下裤子准备欣赏,打开后却发现什么也没有,而随后你的基 ...

  3. winserver2008安装tomcat+mysql+httpd+redis环境

    1. 装tomcat和jdk http://www.cnblogs.com/SHI520/p/4546849.html     2. 安装mysql5.7 https://www.jb51.net/a ...

  4. js及Java中对于两个时间日期的判断脚本

    JS脚本: function checkDateIsEdited(createDate) { var compareDate = createDate.replace("-",&q ...

  5. Vue 父子组件传递方式

    问题: parent.vue <template> <div> 父组件 <child :childObject="asyncObject">&l ...

  6. ArrayList集合与List与数组的区别

    import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.Lis ...

  7. ator自动生成mybatis配置和类信息

    generator自动生成mybatis的xml配置.model.map等信息: 1.下载mybatis-generator-core-1.3.2.jar包.        网址:http://cod ...

  8. Flask 数据库迁移

    在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中. ...

  9. Android动画及滑动事件冲突解决(转载)

    原文链接:http://blog.csdn.net/singwhatiwanna/article/details/38168103 Android开发中动画和事件处理是程序员迈向高手的必经之路,也是重 ...

  10. (转)zabbix3.4使用percona-monitoring-plugins监控mysql

    原文:https://blog.csdn.net/yanggd1987/article/details/79656771 简介 之前主要使用nagios监控mysql,本文主要介绍使用percona- ...