В Go есть несколько способов преобразовать изображение в байты и обратно. Рассмотрим каждый из них.
Преобразование изображения в байты:
1. С использованием пакета image
и bytes
:
package main import ( "bytes" "fmt" "image" "image/jpeg" "log" "os" ) func main() { // Открываем изображение file, err := os.Open("image.jpg") if err != nil { log.Fatal(err) } defer file.Close() // Читаем изображение img, _, err := image.Decode(file) if err != nil { log.Fatal(err) } // Преобразуем изображение в байты buf := new(bytes.Buffer) err = jpeg.Encode(buf, img, nil) if err != nil { log.Fatal(err) } // Получаем байты из буфера bytes := buf.Bytes() fmt.Println(bytes) }
2. С использованием пакета os
и метода ReadFile
:
package main import ( "fmt" "log" "os" ) func main() { // Читаем изображение из файла в байты bytes, err := os.ReadFile("image.jpg") if err != nil { log.Fatal(err) } fmt.Println(bytes) }
Преобразование байтов в изображение:
1. С использованием пакета image
и bytes
:
package main import ( "bytes" "fmt" "image" "image/jpeg" "log" "os" ) func main() { // Читаем байты из файла bytes, err := os.ReadFile("image.jpg") if err != nil { log.Fatal(err) } // Преобразуем байты в изображение img, _, err := image.Decode(bytes.NewReader(bytes)) if err != nil { log.Fatal(err) } // Сохраняем изображение out, err := os.Create("output.jpg") if err != nil { log.Fatal(err) } defer out.Close() // Записываем изображение err = jpeg.Encode(out, img, nil) if err != nil { log.Fatal(err) } fmt.Println("Изображение успешно преобразовано") }
2. С использованием пакета os
и метода WriteFile
:
package main import ( "fmt" "log" "os" ) func main() { // Читаем байты из файла // В данном случае предполагается, что изначально изображение находится в байтах bytes, err := os.ReadFile("image.jpg") if err != nil { log.Fatal(err) } // Сохраняем байты в файл err = os.WriteFile("output.jpg", bytes, 0644) if err != nil { log.Fatal(err) } fmt.Println("Изображение успешно преобразовано") }
В обоих случаях файл с изображением image.jpg
должен находиться в том же каталоге, что и исходный файл с кодом Go.
Надеюсь, что это поможет!