Heim >Backend-Entwicklung >Golang >Wie konvertiere ich ein Golang „image.Image' in ein „[]Byte' für den S3-Upload?

Wie konvertiere ich ein Golang „image.Image' in ein „[]Byte' für den S3-Upload?

Linda Hamilton
Linda HamiltonOriginal
2024-12-03 04:52:09579Durchsuche

How to Convert a Golang `image.Image` to a `[]byte` for S3 Upload?

Konvertieren eines Bildes von image.Image in das []Byte-Format in Golang

Diese Frage bezieht sich auf die Konvertierung eines als Bild dargestellten Bildes. Bildobjekt zu einem Byte-Array, dargestellt als Typ []byte in Golang. Die besondere Herausforderung wird im bereitgestellten Code-Snippet deutlich, in dem der Konvertierungsschritt mit gepunkteten Linien markiert ist.

// ...

original_image, _, err := image.Decode(bytes.NewReader(image_data))

new_image := resize.Resize(160, 0, original_image, resize.Lanczos3)

// Convert the image.Image to []byte here

new_path := key + "_sm"

err = mybucket.Put(new_path, send_S3, "image/jpg", "aclstring")

Um das Problem zu beheben, soll das geänderte Bild, das in new_image gespeichert ist, in ein umgewandelt werden Byte-Array, sodass es über die Put-Funktion an den S3-Bucket übertragen werden kann.

Die Abhilfe besteht in der Verwendung des Typs bytes.Buffer, der einen In-Memory-Puffer bietet zum Schreiben von Daten. Dieser Puffer dient als Ziel für die JPEG-kodierten Bilddaten. Im Gegensatz dazu speichert der zuvor verwendete bufio.Writer lediglich Daten zwischen, bevor er sie an einen zugrunde liegenden Writer weitergibt, ohne die Daten im Speicher anzusammeln.

So sollte der Code angepasst werden:

buf := new(bytes.Buffer)
err := jpeg.Encode(buf, new_image, nil)
send_s3 := buf.Bytes()

Dieser aktualisierte Code verwendet einen bytes.Buffer, um die JPEG-codierten Bilddaten im Speicher zu sammeln, die dann durch Aufrufen der Bytes-Methode im Puffer als Byte-Array abgerufen werden. Dieses Byte-Array kann nun an die Put-Funktion übergeben werden, um das Bild in den S3-Bucket hochzuladen.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich ein Golang „image.Image' in ein „[]Byte' für den S3-Upload?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn