Bilder mit Go dekodieren und kodieren
In Go wird ein Bild vom Typ image.Image in ein Byte-Slice ([]Byte) konvertiert ) ist für die Speicherung und Übertragung von Bilddaten unerlässlich. Dieser Artikel beschreibt ein häufiges Problem, das bei dieser Konvertierung auftritt, und bietet eine Lösung.
Das bereitgestellte Code-Snippet versucht, ein Bild aus einem Bucket herunterzuladen, es in ein Bild zu dekodieren, seine Größe zu ändern und dann die geänderte Größe zu konvertieren Bild zurück in ein Byte-Slice zum Hochladen auf S3. Allerdings liegt das Problem im hervorgehobenen Abschnitt des Codes.
// reset format the image.Image to data []byte here var send_S3 []byte var byteWriter = bufio.NewWriter(send_S3) err = jpeg.Encode(byteWriter, new_image, nil)
Das Problem besteht darin, dass ein bufio.Writer zum Zwischenspeichern von Daten verwendet wird, bevor sie an einen anderen Writer geschrieben werden, aber in diesem Fall benötigen wir direkt in einen Speicherpuffer schreiben. Um dieses Problem zu lösen, verwenden wir stattdessen einen bytes.Buffer, der in den Speicher schreibt.
buf := new(bytes.Buffer) err := jpeg.Encode(buf, new_image, nil) send_s3 := buf.Bytes()
Durch die Verwendung eines bytes.Buffer wird das in der Größe geänderte Bild direkt in den Speicher geschrieben, wodurch das geeignete Byte-Slice erstellt wird Hochladen auf S3. Dadurch kann der Code das in der Größe geänderte Bild erfolgreich kodieren und in den gewünschten Bucket hochladen.
Das obige ist der detaillierte Inhalt vonWie kodiere ich ein in der Größe geändertes Bild effizient in ein [] Byte in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!