2015-10-15 5 views
1

Я пытаюсь написать 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) ввести [] байт

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

+0

вам нужно иметь декодированного изображения делать? Гораздо быстрее записать данные непосредственно в файл. Если вам нужны только границы, вы можете использовать DecodeConfig. – JimB

ответ

5

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

В последней строке следует заменить:

err = png.Encode(imgFile, pngImage) 

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

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

Draw a rectangle in Golang?