mtfosbot/router/rimg/rimg.go

91 lines
1.7 KiB
Go
Raw Normal View History

2018-09-18 15:54:36 +00:00
package rimg
import (
"bytes"
"image"
_ "image/gif"
"image/jpeg"
_ "image/jpeg"
_ "image/png"
"io/ioutil"
"os"
"path"
"strconv"
"github.com/nfnt/resize"
"git.trj.tw/golang/mtfosbot/module/config"
"git.trj.tw/golang/mtfosbot/module/context"
"git.trj.tw/golang/mtfosbot/module/utils"
)
// GetOriginImage -
func GetOriginImage(c *context.Context) {
fname := c.Param("imgname")
conf := config.GetConf()
imgP := utils.ParsePath(conf.ImageRoot)
exists := utils.CheckExists(imgP, true)
if !exists {
c.NotFound("image path not found")
return
}
newP := path.Join(imgP, fname)
exists = utils.CheckExists(newP, false)
if !exists {
c.NotFound("image file not found")
return
}
fileBuf, err := os.Open(newP)
if err != nil {
c.ServerError(nil)
return
}
defer fileBuf.Close()
imgf, _, err := image.DecodeConfig(fileBuf)
if err != nil {
c.ServerError(nil)
return
}
if imgf.Height > 1024 || imgf.Width > 1024 {
img, _, err := image.Decode(fileBuf)
if err != nil {
c.ServerError(nil)
return
}
w := 0
h := 0
if imgf.Width > imgf.Height {
w = 1024
} else {
h = 1024
}
buf := new(bytes.Buffer)
m := resize.Resize(uint(w), uint(h), img, resize.Bilinear)
err = jpeg.Encode(buf, m, nil)
if err != nil {
c.ServerError(nil)
return
}
c.Writer.Header().Set("Content-Type", "image/jpeg")
c.Writer.Header().Set("Content-Length", strconv.Itoa(buf.Len()))
_, err = c.Writer.Write(buf.Bytes())
if err != nil {
c.ServerError(nil)
}
return
}
buf, err := ioutil.ReadAll(fileBuf)
c.Writer.Header().Set("Content-Type", "image/jpeg")
c.Writer.Header().Set("Content-Length", strconv.Itoa(len(buf)))
_, err = c.Writer.Write(buf)
if err != nil {
c.ServerError(nil)
return
}
}