Как преобразовать картинку в байты и наоборот golang?

В 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.

Надеюсь, что это поможет!