Как записать декодированное base64 изображение png в файл?

Я пытаюсь записать png-изображение base64 в файл со следующим кодом:

imageReader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(Images[i]))
pngImage, _, err := image.Decode(imageReader)
if err != nil {
  beego.Error(err)
}
bounds := pngImage.Bounds()
if imgFile, err = os.Create(fileName + ".png"); err != nil {
   return Data{}
}
defer imgFile.Close()
_, err = imgFile.Write([]byte(pngImage))

Границы в порядке. Сообщение об ошибке для последней строки

не может преобразовать pngImage (тип image.Image) в тип []byte

Очевидно, потому что image.Image не является byte[]. Но как я могу преобразовать его? Или есть еще более простая версия для этого.


person Michael    schedule 15.10.2015    source источник
comment
Вам нужно иметь декодированное изображение? Гораздо быстрее записать данные непосредственно в файл. Если вам нужны только границы, вы можете использовать DecodeConfig.   -  person JimB    schedule 15.10.2015


Ответы (1)


Используйте png.Encode() для кодирования image.Image в файл (io.Writer).

Последнюю строку следует заменить на:

err = png.Encode(imgFile, pngImage)

png.Encode() создаст и отправит последовательность байтов указанному io.Writer (который может быть os.File из курс), описывающий заданное изображение в формате PNG.

Также ознакомьтесь с этим ответом, который содержит полный пример записи изображения в файл (в формате PNG):

Нарисовать прямоугольник в Golang?

person icza    schedule 15.10.2015