golang使用image包及draw.Draw合成图片
生活随笔
收集整理的這篇文章主要介紹了
golang使用image包及draw.Draw合成图片
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?在golang中合成圖片,一般使用image包及draw.Draw即可,images包的具體方法和用法:https://studygolang.com/pkgdoc
代碼中圖片縮放的包:github.com/nfnt/resize
/** 從url中獲取圖片資源*/ func readImgData(url string) image.Image {resp, err := http.Get(url)if err != nil {logs.Info("圖片獲取失敗", err)return nil}defer resp.Body.Close()img,_,err := image.Decode(resp.Body)if err != nil {logs.Info("圖片decode失敗", err)return nil}return img }// 計算圖片縮放后的尺寸 func calculateRatioFit(srcWidth, srcHeight int, defaultWidth, defaultHeight float64) (int, int) {ratio := math.Min(defaultWidth/float64(srcWidth), defaultHeight/float64(srcHeight))return int(math.Ceil(float64(srcWidth) * ratio)), int(math.Ceil(float64(srcHeight) * ratio)) }/** 3圖合1,創建圖片 */ func CreatePicture(img1Url, img2Url, img3Url string) (map[string]interface{},bool) {returnData := make(map[string]interface{})if img1Url == "" || img2Url == "" || img3Url == "" {return nil, false}//根據圖片地址獲取圖片.img1 := readImgData(img1Url)img2 := readImgData(img2Url)img3 := readImgData(img3Url)if img1 == nil || img2 == nil || img3 == nil {return nil, false}//圖片1縮放b1 := img1.Bounds()img1Width := b1.Max.Ximg1Height := b1.Max.Yw1, h1 := calculateRatioFit(img1Width, img1Height, 344, 344)img1m := resize.Resize(uint(w1), uint(h1), img1, resize.Lanczos3)//圖片2縮放b2 := img2.Bounds()img2Width := b2.Max.Ximg2Height := b2.Max.Yw2, h2 := calculateRatioFit(img2Width, img2Height, 172, 172)img2m := resize.Resize(uint(w2), uint(h2), img2, resize.Lanczos3)//圖片3縮放b3 := img3.Bounds()img3Width := b3.Max.Ximg3Height := b3.Max.Yw3, h3 := calculateRatioFit(img3Width, img3Height, 172, 172)img3m := resize.Resize(uint(w3), uint(h3), img3, resize.Lanczos3)//創建源圖fileName := "dst.jpg"file, err := os.Create(fileName)if err != nil {return nil,false}defer func() {err := file.Close()if err != nil {logs.Info("CreateGoodsPicture:圖片資源關閉錯誤", err)}}()//圖片三合一繪圖jpg := image.NewRGBA(image.Rect(0, 0, 344, 516))draw.Draw(jpg, jpg.Bounds().Add(image.Pt(0,0)), img1m, img1m.Bounds().Min, draw.Src)draw.Draw(jpg, jpg.Bounds().Add(image.Pt(0,344)), img2m, img2m.Bounds().Min, draw.Src)draw.Draw(jpg, jpg.Bounds().Add(image.Pt(172,344)), img3m, img3m.Bounds().Min, draw.Src)//jpeg.Encode默認圖片質量75%err1 := jpeg.Encode(file, jpg, nil)if err1 != nil {logs.Info("CreateGoodsPicture:圖片png.Encode錯誤", err1)return nil, false}defer func() {err := os.Remove(fileName)if err != nil {logs.Info("CreateGoodsPicture:圖片資源刪除錯誤", err)}}()return returnData, true }?
總結
以上是生活随笔為你收集整理的golang使用image包及draw.Draw合成图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 东北虎“完达山1号”救护的中国速度!
- 下一篇: asp存入当前时间mysql_asp当前