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

Опитвам се да напиша base64 png изображение във файл със следния код:

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 не е байт[]. Но как мога да го конвертирам? Или има дори по-проста версия за това.


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