2016-09-25 11 views
1
私は最終的なイメージだけの最後の画像が含まれていることを除いて大きなものを形成し、

Golang PNG描く透明

func generateUserImage(username string, items []models.Item) error { 
    imageFile, err := os.Create("public/items/users/" + username + ".png") 
    if err != nil { 
     return err 
    } 
    profileImage := image.NewRGBA(image.Rect(0, 0, 261, 336)) 
    for _, item := range items { 
     revel.INFO.Println(item) 
     itemFile, err := os.Open("public/items/universe/" + item.Type + "/" + item.Name + ".png") 
     if err != nil { 
      return err 
     } 
     itemImage, err := png.Decode(itemFile) 
     if err != nil { 
      return err 
     } 
     draw.Draw(profileImage, profileImage.Bounds(), itemImage, image.Point{0, 0}, draw.Src) 
     itemFile.Close() 
    } 
    err = png.Encode(imageFile, profileImage) 
    if err != nil { 
     return err 
    } 
    defer imageFile.Close() 
    return nil 
} 

すべてが正常に動作しているようだPNGとして保存するために、複数の透明画像を描画しようとしています

レンジ・ループ(レンジ・ループは5回も)すべての画像は透明で背景が.pngです。ここでは画像はあなたが画像を保存して、背景が透明であることを確認してみてください...だから、私は最終的なイメージが1枚のだけの画像が含まれていないすべての理由はわかりません

enter image description here

を見てどのようにデモがあります

ありがとうございました

+1

'draw.Src'ではなく' draw.Over'を使用しますか? –

+0

それを忘れてしまった。それはそれを解決しました! –

+1

Fyiの場合、関数の最後から2番目の行を閉じることを延期しています。それを返す関数のエラーをチェックした後でそれを延期します。したがって、あなたの例では、変数profileImageを持つ行の直前で閉じることを延期します。 –

答えて

2

コメントに記載されています。

draw.Draw(profileImage, profileImage.Bounds(), itemImage, image.Point{0, 0}, draw.Over) 
関連する問題