golang在圖片上繪製中文不亂碼的方法

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

直接先上代碼:

package mainimport ("fmt""github.com/golang/freetype""image"//"image/color""image/png""io/ioutil""log""os")const (dx = 500 // 圖片的大小 寬度dy = 500 // 圖片的大小 高度// fontFile = "FZFSK.TTF"fontFile = "bbb.ttf"fontSize = 20 // 字型尺寸fontDPI  = 72 // 螢幕每英寸的解析度)func main() {// 需要儲存的檔案imgcounter := 123imgfile, _ := os.Create(fmt.Sprintf("%03d.png", imgcounter))defer imgfile.Close()// 建立一個 指定大小的 RGBA位元影像img := image.NewNRGBA(image.Rect(0, 0, dx, dy))// 畫背景/*for y := 0; y < dy; y++ {for x := 0; x < dx; x++ {// 設定某個點的顏色,依次是 RGBAimg.Set(x, y, color.RGBA{uint8(x), uint8(y), 0, 255})}}*/// 讀字型資料fontBytes, err := ioutil.ReadFile(fontFile)if err != nil {log.Println("讀取字型資料出錯")log.Println(err)return}font, err := freetype.ParseFont(fontBytes)if err != nil {log.Println("轉換字型樣式出錯")log.Println(err)return}c := freetype.NewContext()c.SetDPI(fontDPI)c.SetFont(font)c.SetFontSize(fontSize)c.SetClip(img.Bounds())c.SetDst(img)c.SetSrc(image.Black)pt := freetype.Pt(10, 10+int(c.PointToFixed(fontSize)>>8)) // 字出現的位置_, err = c.DrawString("你好,你知道我是誰嗎", pt)if err != nil {log.Println("向圖片寫字型出錯")log.Println(err)return}//重新設定第二行y的位置pt.Y += c.PointToFixed(fontSize)_, err = c.DrawString("哈哈哈 杜冰", pt)if err != nil {log.Println("向圖片寫字型出錯")log.Println(err)return}// 以PNG格式儲存檔案err = png.Encode(imgfile, img)if err != nil {log.Println("產生圖片出錯")log.Fatal(err)}}

由注釋掉的背景代碼可以知道,畫圖片主要是設定像素點的顏色。
網上有很多方法,用的基本都是freetype來寫的,測試英文的比較多,也有測試中文的,但是我測試中文沒有成功過,一直報錯。開始感覺可能是編碼的問題,畢竟golang的預設編碼是utf8,專門下載了mahonia這個包解碼是為gb2312、換過各種中文字型還是不行、看了原始碼查了好多資料感覺原始碼沒什麼問題。最後在github上找到了一個例子把他裡面所有的字型試了一遍就發現了一個可以正常使用中文的字型。
自此才發現是一般中文字型的問題,就萌生了自己創造字型的想法。查詢了一下一般用的是FontCreator9.1這個軟體,可是創造一個字型太TMD難了^_^。試著把網上下載下來的字型用這個軟體開啟,再匯出,發現也是可以的喲。
匯出方法:檔案->匯出字型->匯出 TureType/OpenType 字型;最後寫為ttf格式的就可以了。
用這個方法試了五六個字型都是可以的。
至此表情包背景加圖片,圖片層疊順序,在圖片寫文字等技術知識全部打通了,只剩下邏輯處理與減前台操作知識點了。

原文地址:http://www.1025m.com/35.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.