主頁 > 知識庫 > golang 生成二維碼海報的實現(xiàn)代碼

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

熱門標簽:烏魯木齊人工電銷機器人系統(tǒng) 智能電銷機器人營銷 長沙ai機器人電銷 澳門防封電銷卡 福州鐵通自動外呼系統(tǒng) 地圖標注測試 濮陽自動外呼系統(tǒng)代理 賺地圖標注的錢犯法嗎 廣東語音外呼系統(tǒ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() 
 
 // 設置為居中 
 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) 
}

預覽

合成到海報

func main() { 
 var ( 
 bgFile *os.File 
 bgImg  image.Image 
 qrCodeImg image.Image 
 offset image.Point 
 ) 
 
 // 01: 打開背景圖片 
 bgFile, err = os.Open("./bg.png") 
 if err != nil { 
 fmt.Println("打開背景圖片失敗", 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時這段要改 
 i, _ := os.Create(path.Base("a2.png")) 
 
 _ = png.Encode(i, m) 
 
 defer i.Close() 
 
}

預覽

上傳至阿里云

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

開始上傳

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

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

標簽:德州 太原 調(diào)研邀請 貴陽 廣西 阿克蘇 慶陽 西雙版納

巨人網(wǎng)絡通訊聲明:本文標題《golang 生成二維碼海報的實現(xiàn)代碼》,本文關鍵詞  golang,生成,二維,碼海,報的,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang 生成二維碼海報的實現(xiàn)代碼》相關的同類信息!
  • 本頁收集關于golang 生成二維碼海報的實現(xiàn)代碼的相關信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章