1. 程式人生 > >教你用go freetype根據使用者暱稱生成頭像

教你用go freetype根據使用者暱稱生成頭像

最近需要為使用者服務新增一些新功能,其中就包括在註冊時根據使用者暱稱生成頭像這一點。

由於使用者服務是用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[1]) ab.SetFrontgroundColor(color.White) ab.SetFontSize(80) ab.SetAvatarSize(200, 200) if err := ab.GenerateImageAndSave("12", "./out.png"); err != nil { fmt.Println(err) return }

完整的例子可以在倉庫的example裡看到:

點選檢視

你可以按照你的需求設定頭像的寬高以及字型大小和字型檔案,需要注意的是,目前該庫只實現了一個免費開源的字型檔案——思源。

因為每個字型檔案的寬高都有點差異,所以當你引入新的字型時也需要拓展一個新的演算法來告訴如何生成居中的文字。

可以參考 calc 資料夾下的實現。

以上,希望對以後有相同需求的同學有幫助。

(很遺憾,最近在寫go和python比較多,所以沒有c#的實現版本,幸運的是,c#在圖形處理方面的庫本就不少,資料很全完全不用操心。)