【发布时间】:2016-12-03 13:30:19
【问题描述】:
so.. 我有一个 base64 编码的字符串,我需要对其进行解码,检查它的宽度和高度,然后保存到文件中。但是.. 我一直在保存损坏的图像文件。
package server
import (
"encoding/base64"
"errors"
"io"
"os"
"strings"
"image"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
)
var (
ErrBucket = errors.New("Invalid bucket!")
ErrSize = errors.New("Invalid size!")
ErrInvalidImage = errors.New("Invalid image!")
)
func saveImageToDisk(fileNameBase, data, bucket string) (string, error) {
idx := strings.Index(data, ";base64,")
if idx < 0 {
return "", ErrInvalidImage
}
reader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(data[idx+8:]))
imgCfg, fmt, err := image.DecodeConfig(reader)
if err != nil {
return "", err
}
if imgCfg.Width != 750 || imgCfg.Height != 685 {
return "", ErrSize
}
fileName := fileNameBase + "." + fmt
f, err := os.Create(fileName)
if err != nil {
return "", err
}
_, err = io.Copy(f, reader)
f.Close()
return fileName, err
}
它确实保存了一个文件.. 我正在测试的 base64 根据在线 base64 到图像转换器是有效的。有什么帮助吗?
http://pastebin.com/u18eRv7d 这是我正在使用的 base64 字符串(函数中的数据)
【问题讨论】:
-
阅读器在读取时不会“用完”其内容吗?