佳木斯湛栽影视文化发展公司

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

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

熱門標簽:百度競價排名 AI電銷 呼叫中心市場需求 地方門戶網(wǎng)站 鐵路電話系統(tǒng) 網(wǎng)站排名優(yōu)化 服務外包 Linux服務器

生成帶頭像的二維碼

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) 
}

預覽

合成到海報

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ù)的方法

標簽:蘭州 崇左 湘潭 衡水 仙桃 黃山 銅川 湖南

巨人網(wǎng)絡(luò)通訊聲明:本文標題《golang 生成二維碼海報的實現(xiàn)代碼》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    长沙市| 禄劝| 仙桃市| 神木县| 永靖县| 潞西市| 和林格尔县| 广灵县| 康马县| 青州市| 阿拉尔市| 嘉鱼县| 博湖县| 泰宁县| 库尔勒市| 余姚市| 北流市| 合阳县| 辛集市| 荣成市| 西宁市| 娱乐| 邢台市| 固阳县| 祁东县| 湛江市| 蕲春县| 庆云县| 兖州市| 虎林市| 光泽县| 墨江| 龙口市| 高碑店市| 太白县| 准格尔旗| 自治县| 海城市| 忻城县| 额敏县| 胶南市|