2016-09-25 6 views
1

ich mehr transparenten Bilder zu zeichnen versuchen einen großen zu bilden und als PNGGolang png zeichnet transparent

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 
} 

Alles scheint außer zu funktionieren gut speichern, dass das endgültige Bild nur das letzte Bild von enthält die Bereichsschleife (auch wenn der Bereich 5 mal durchlaufen wird). Alle Bilder sind .png und mit transparentem Hintergrund. Hier ist eine Demo auf, wie Bilder aussehen

enter image description here

Sie können versuchen, das Bild zu speichern und sehen, dass der Hintergrund transparent ist ... Also ich habe keine Ahnung, warum das endgültige Bild enthält nur 1 Bild und nicht alle

Danke

+1

Verwenden Sie 'draw.Over' anstelle von' draw.Src'? –

+0

Vergessen Sie das. Das hat es gelöst! –

+1

Fyi, Sie verzögern eine Schließung als vorletzte Linie in der Funktion. Verschieben Sie es, nachdem Sie den Fehler der Funktion überprüft haben, die das zurückgibt. Ändern Sie also in Ihrem Beispiel den Abschluss unmittelbar vor der Zeile mit der Variablen profileImage. –

Antwort

2

Wie in den Kommentaren erwähnt.

draw.Draw(profileImage, profileImage.Bounds(), itemImage, image.Point{0, 0}, draw.Over) 
Verwandte Themen