Bei der Bildverarbeitung in Go müssen Sie möglicherweise zwischen den Formaten image.Image und []Byte konvertieren . Dies kann nützlich sein, um Bilder in einer Datenbank zu speichern, sie über die Leitung zu senden oder verschiedene Bildoperationen durchzuführen.
In Ihrem speziellen Fall versuchen Sie, die Größe eines Bildes mithilfe des Resize-Pakets zu ändern und es dann zu konvertieren new_image in ein []Byte-Array zum Hochladen in einen S3-Bucket geändert. Ihr Code enthält jedoch ein kritisches Problem, das unten hervorgehoben wird:
// 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 Sie bufio.NewWriter zum Umschließen eines []Byte-Slices verwenden, was für Ihren Zweck falsch ist. bufio.Writer ist für die Streaming-Ausgabe an ein E/A-Gerät konzipiert und nicht für die Speicherung von Binärdaten im Speicher.
Um dieses Problem zu beheben, sollten Sie stattdessen einen bytes.Buffer verwenden. bytes.Buffer stellt einen speicherinternen Puffer bereit, der zum Erstellen eines []Byte-Slices verwendet werden kann:
buf := new(bytes.Buffer) err := jpeg.Encode(buf, new_image, nil) send_S3 := buf.Bytes()
Dieser Code erstellt ein bytes.Buffer-Objekt mit dem Namen buf und verwendet die jpeg.Encode-Funktion zum Schreiben des Größe der Bilddaten in Puffer geändert. Die Bytes()-Methode von buf gibt dann das rohe Byte-Array zurück, das das codierte Bild darstellt.
Mit dieser Änderung konvertiert Ihr Code das neue_Bild korrekt in ein []Byte-Array, sodass Sie es erfolgreich auf S3 hochladen können .
Das obige ist der detaillierte Inhalt vonWie konvertiere ich ein Go image.Image in ein []Byte für eine effiziente Speicherung und Übertragung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!