濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼

golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼

熱門(mén)標(biāo)簽:烏魯木齊人工電銷(xiāo)機(jī)器人系統(tǒng) 智能電銷(xiāo)機(jī)器人營(yíng)銷(xiāo) 長(zhǎng)沙ai機(jī)器人電銷(xiāo) 澳門(mén)防封電銷(xiāo)卡 福州鐵通自動(dòng)外呼系統(tǒng) 地圖標(biāo)注測(cè)試 濮陽(yáng)自動(dòng)外呼系統(tǒng)代理 賺地圖標(biāo)注的錢(qián)犯法嗎 廣東語(yǔ)音外呼系統(tǒng)供應(yīng)商

生成帶頭像的二維碼

import ( 
 "errors" 
 "fmt"
 "github.com/nfnt/resize" 
 "github.com/skip2/go-qrcode" 
 "image" 
 "image/draw" 
 "image/png" 
 "os"
 ) 
 
var err error 
 
func createAvatar() (image.Image, error) { 
 var ( 
 bgImg  image.Image 
 offset  image.Point 
 avatarFile *os.File 
 avatarImg image.Image 
 ) 
 
 bgImg, err = createQrCode("http://www.baidu.com") 
 
 if err != nil { 
 fmt.Println("創(chuàng)建二維碼失敗:", err) 
 return nil, errors.New("創(chuàng)建二維碼失敗") 
 } 
 avatarFile, err = os.Open("./avatar.png") 
 avatarImg, err = png.Decode(avatarFile) 
 avatarImg = ImageResize(avatarImg, 40, 40) 
 b := bgImg.Bounds() 
 
 // 設(shè)置為居中 
 offset = image.Pt((b.Max.X-avatarImg.Bounds().Max.X)/2, (b.Max.Y-avatarImg.Bounds().Max.Y)/2) 
 
 m := image.NewRGBA(b) 
 
 draw.Draw(m, b, bgImg, image.Point{X: 0, Y: 0,}, draw.Src) 
 
 draw.Draw(m, avatarImg.Bounds().Add(offset), avatarImg, image.Point{X: 0, Y: 0}, draw.Over) 
 
 return m, err 
} 
 
func createQrCode(content string) (img image.Image, err error) { 
 var qrCode *qrcode.QRCode 
 
 qrCode, err = qrcode.New(content, qrcode.Highest) 
 
 if err != nil { 
 return nil, errors.New("創(chuàng)建二維碼失敗") 
 } 
 qrCode.DisableBorder = true 
 
 img = qrCode.Image(150) 
 
 return img, nil 
} 
 
func ImageResize(src image.Image, w, h int) image.Image { 
 return resize.Resize(uint(w), uint(h), src, resize.Lanczos3) 
}

預(yù)覽

合成到海報(bào)

func main() { 
 var ( 
 bgFile *os.File 
 bgImg  image.Image 
 qrCodeImg image.Image 
 offset image.Point 
 ) 
 
 // 01: 打開(kāi)背景圖片 
 bgFile, err = os.Open("./bg.png") 
 if err != nil { 
 fmt.Println("打開(kāi)背景圖片失敗", err) 
 return 
 } 
 
 defer bgFile.Close() 
 
 // 02: 編碼為圖片格式 
 bgImg, err = png.Decode(bgFile) 
 if err != nil { 
 fmt.Println("背景圖片編碼失敗:", err) 
 return 
 } 
 
 // 03: 生成二維碼 
 qrCodeImg, err = createAvatar() 
 if err != nil { 
 fmt.Println("生成二維碼失敗:", err) 
 return 
 } 
 
 offset = image.Pt(426, 475) 
 
 b := bgImg.Bounds() 
 
 m := image.NewRGBA(b) 
 
 draw.Draw(m, b, bgImg, image.Point{X: 0, Y: 0,}, draw.Src) 
 
 draw.Draw(m, qrCodeImg.Bounds().Add(offset), qrCodeImg, image.Point{X: 0, Y: 0}, draw.Over) 
 
 // 上傳至oss時(shí)這段要改 
 i, _ := os.Create(path.Base("a2.png")) 
 
 _ = png.Encode(i, m) 
 
 defer i.Close() 
 
}

預(yù)覽

上傳至阿里云

func ossClient() (bucket *alioss.Bucket, err error) { 
 var ( 
 key string = "xxx" 
 bucketName string = "xxx" 
 secret string = "xxx" 
 endpoint string = "xxx" 
 ) 
 
 // 創(chuàng)建OSSClient實(shí)例。 
 client, err = alioss.New(endpoint, key, secret) 
 
 if err != nil { 
 fmt.Println("獲取阿里云oss實(shí)例失敗:", err) 
 return nil, errors.New("資源服務(wù)器配置有誤") 
 } 
 // 獲取存儲(chǔ)空間。 
 bucket, err = client.Bucket(bucketName) 
 
 if err != nil { 
 logger.Error("獲取阿里云oss存儲(chǔ)空間錯(cuò)誤:", err) 
 return nil, errors.New("獲取存儲(chǔ)服務(wù)器失敗") 
 } 
 return bucket, nil 
}

開(kāi)始上傳

將之前注釋的那段刪除 修改成這段
bucket, err = ossClient() 
 
if err != nil { 
 fmt.Println("error:", err) 
 return 
} 
 
imgBuff := bytes.NewBuffer(nil) //開(kāi)辟一個(gè)新的空buff 
err = png.Encode(imgBuff, m) //img寫(xiě)入到buff 
 
if err != nil { 
 fmt.Println("寫(xiě)入緩沖區(qū)失敗",err) 
 return
} 
 
err = bucket.PutObject("qrcode/2-1.png", imgBuff) 
 
fmt.Println("error:", err)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Golang中生成隨機(jī)字符串并復(fù)制到粘貼板的方法
  • golang生成指定位數(shù)的隨機(jī)數(shù)的方法
  • Golang map如何生成有序的json數(shù)據(jù)詳解
  • 在Golang代碼中如何自動(dòng)生成版本號(hào)的方法示例
  • 利用Golang生成整數(shù)隨機(jī)數(shù)方法示例
  • Golang編程實(shí)現(xiàn)生成n個(gè)從a到b不重復(fù)隨機(jī)數(shù)的方法

標(biāo)簽:德州 太原 調(diào)研邀請(qǐng) 貴陽(yáng) 廣西 阿克蘇 慶陽(yáng) 西雙版納

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼》,本文關(guān)鍵詞  golang,生成,二維,碼海,報(bào)的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    简阳市| 喀什市| 张家港市| 新邵县| 黎平县| 东莞市| 张家界市| 丰都县| 泸溪县| 平陆县| 阿巴嘎旗| 金秀| 中卫市| 安西县| 突泉县| 巴彦县| 黄骅市| 东辽县| 天柱县| 郴州市| 昌都县| 通山县| 永新县| 乌拉特后旗| 徐州市| 吐鲁番市| 黔西| 璧山县| 辽宁省| 盐源县| 临洮县| 永吉县| 江油市| 宝鸡市| 瑞安市| 昭觉县| 葵青区| 丹凤县| 高淳县| 缙云县| 嘉善县|