Here is the code for my function:
func processImage(p *generalLedgerPage) {
if len(p.UserToEdit.PhotoString64) == 0 {
return
}
log.Println("processImage: ", p.UserToEdit.PhotoString64)
// remove the header: i.e.: data:image/jpeg;base64, ...
var imageData string
r := strings.Split(p.UserToEdit.PhotoString64, ",")
if len(r) == 2 {
imageData = r[1]
}
fileType := ""
buf := bytes.NewBufferString(imageData)
reader := base64.NewDecoder(base64.StdEncoding, buf)
decodedImage, err := jpeg.Decode(reader)
if err != nil {
log.Println("jpeg.Decode failed error: ", err)
decodedImage, err = png.Decode(reader)
if err != nil {
log.Println("png.Decode failed error: ", err)
decodedImage, err = gif.Decode(reader)
if err != nil {
log.Println("gif.Decode failed error: ", err)
} else {
fileType = "gif"
}
} else {
fileType = "png"
}
} else {
fileType = "jpg"
}
if err == nil {
log.Println("decodedImage.Bounds(): ", decodedImage.Bounds())
}
//reader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(p.UserToEdit.PhotoString64))
// this will reset the position to start
buf = bytes.NewBufferString(imageData)
reader = base64.NewDecoder(base64.StdEncoding, buf)
config, err := jpeg.DecodeConfig(reader)
if err != nil {
log.Println("error jpeg.DecodeConfig: ", err)
config, err = png.DecodeConfig(reader)
if err != nil {
log.Println("error png.DecodeConfig: ", err)
config, err = gif.DecodeConfig(reader)
if err != nil {
log.Println("error gif.DecodeConfig: ", err)
}
}
}
if config.Width > 0 {
log.Println("jpeg.DecodeConfig success config: ", config)
log.Println("Width:", config.Width, "Height:", config.Height)
}
buf1 := new(bytes.Buffer)
var resizedImage image.Image
if err == nil {
resizedImage = resize.Resize(uint(100), 0, decodedImage, resize.Lanczos3)
switch fileType {
case "jpg":
err = jpeg.Encode(buf1, resizedImage, nil)
break
case "png":
err = png.Encode(buf1, resizedImage)
break
case "gif":
err = gif.Encode(buf1, resizedImage, nil)
break
}
if err != nil {
log.Println("Encode error: ", err)
}
}
if err == nil {
p.UserToEdit.ThumbNailString64 = r[0] + "," + buf1.String()
//p.UserToEdit.ThumbNailString64 = buff1.String()
log.Println("p.UserToEdit.ThumbNailString64: ", p.UserToEdit.ThumbNailString64)
}
}
The incoming file starts with:
`data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD
and the rest of the file is all printable characters
the resulting file, p.UserToEdit.ThumbNailString64, starts with:
`data:image/jpeg;base64,ÿØÿÛaaaa
followed by many nonprintable characters, which basically crashes the browser window trying to process it.