Finish half translation work.
This commit is contained in:
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"github.com/disintegration/imaging"
|
||||
"github.com/eyebluecn/tank/code/core"
|
||||
"github.com/eyebluecn/tank/code/tool/result"
|
||||
"github.com/eyebluecn/tank/code/tool/util"
|
||||
"image"
|
||||
"net/http"
|
||||
@ -21,11 +22,9 @@ type ImageCacheService struct {
|
||||
matterDao *MatterDao
|
||||
}
|
||||
|
||||
//初始化方法
|
||||
func (this *ImageCacheService) Init() {
|
||||
this.BaseBean.Init()
|
||||
|
||||
//手动装填本实例的Bean. 这里必须要用中间变量方可。
|
||||
b := core.CONTEXT.GetBean(this.imageCacheDao)
|
||||
if b, ok := b.(*ImageCacheDao); ok {
|
||||
this.imageCacheDao = b
|
||||
@ -43,7 +42,6 @@ func (this *ImageCacheService) Init() {
|
||||
|
||||
}
|
||||
|
||||
//获取某个文件的详情,会把父级依次倒着装进去。如果中途出错,直接抛出异常。
|
||||
func (this *ImageCacheService) Detail(uuid string) *ImageCache {
|
||||
|
||||
imageCache := this.imageCacheDao.CheckByUuid(uuid)
|
||||
@ -51,52 +49,23 @@ func (this *ImageCacheService) Detail(uuid string) *ImageCache {
|
||||
return imageCache
|
||||
}
|
||||
|
||||
//获取预处理时必要的参数
|
||||
// prepare the resize parameters.
|
||||
func (this *ImageCacheService) ResizeParams(request *http.Request) (needProcess bool, resizeMode string, resizeWidth int, resizeHeight int) {
|
||||
var err error
|
||||
|
||||
//1.0 模式准备逐步废弃掉
|
||||
if request.FormValue("imageProcess") == "resize" {
|
||||
//老模式使用 imageResizeM,imageResizeW,imageResizeH
|
||||
imageResizeM := request.FormValue("imageResizeM")
|
||||
if imageResizeM == "" {
|
||||
imageResizeM = "fit"
|
||||
} else if imageResizeM != "fit" && imageResizeM != "fill" && imageResizeM != "fixed" {
|
||||
panic("imageResizeM参数错误")
|
||||
}
|
||||
imageResizeWStr := request.FormValue("imageResizeW")
|
||||
var imageResizeW int
|
||||
if imageResizeWStr != "" {
|
||||
imageResizeW, err = strconv.Atoi(imageResizeWStr)
|
||||
this.PanicError(err)
|
||||
if imageResizeW < 1 || imageResizeW > 4096 {
|
||||
panic("缩放尺寸不能超过4096")
|
||||
}
|
||||
}
|
||||
imageResizeHStr := request.FormValue("imageResizeH")
|
||||
var imageResizeH int
|
||||
if imageResizeHStr != "" {
|
||||
imageResizeH, err = strconv.Atoi(imageResizeHStr)
|
||||
this.PanicError(err)
|
||||
if imageResizeH < 1 || imageResizeH > 4096 {
|
||||
panic("缩放尺寸不能超过4096")
|
||||
}
|
||||
}
|
||||
|
||||
return true, imageResizeM, imageResizeW, imageResizeH
|
||||
} else if request.FormValue("ir") != "" {
|
||||
//新模式使用 mode_w_h 如果w或者h为0表示这项值不设置
|
||||
if request.FormValue("ir") != "" {
|
||||
//mode_w_h if w or h equal means not required.
|
||||
imageResizeStr := request.FormValue("ir")
|
||||
arr := strings.Split(imageResizeStr, "_")
|
||||
if len(arr) != 3 {
|
||||
panic("参数不符合规范,格式要求为mode_w_h")
|
||||
panic(result.BadRequest("param error. the format is mode_w_h"))
|
||||
}
|
||||
|
||||
imageResizeM := arr[0]
|
||||
if imageResizeM == "" {
|
||||
imageResizeM = "fit"
|
||||
} else if imageResizeM != "fit" && imageResizeM != "fill" && imageResizeM != "fixed" {
|
||||
panic("imageResizeM参数错误")
|
||||
panic(result.BadRequest("mode can only be fit/fill/fixed"))
|
||||
}
|
||||
imageResizeWStr := arr[1]
|
||||
var imageResizeW int
|
||||
@ -104,7 +73,7 @@ func (this *ImageCacheService) ResizeParams(request *http.Request) (needProcess
|
||||
imageResizeW, err = strconv.Atoi(imageResizeWStr)
|
||||
this.PanicError(err)
|
||||
if imageResizeW < 0 || imageResizeW > 4096 {
|
||||
panic("缩放尺寸不能超过4096")
|
||||
panic(result.BadRequest("zoom size cannot exceed 4096"))
|
||||
}
|
||||
}
|
||||
imageResizeHStr := arr[2]
|
||||
@ -113,7 +82,7 @@ func (this *ImageCacheService) ResizeParams(request *http.Request) (needProcess
|
||||
imageResizeH, err = strconv.Atoi(imageResizeHStr)
|
||||
this.PanicError(err)
|
||||
if imageResizeH < 0 || imageResizeH > 4096 {
|
||||
panic("缩放尺寸不能超过4096")
|
||||
panic(result.BadRequest("zoom size cannot exceed 4096"))
|
||||
}
|
||||
}
|
||||
return true, imageResizeM, imageResizeW, imageResizeH
|
||||
@ -123,7 +92,7 @@ func (this *ImageCacheService) ResizeParams(request *http.Request) (needProcess
|
||||
|
||||
}
|
||||
|
||||
//图片预处理功能。
|
||||
//resize image.
|
||||
func (this *ImageCacheService) ResizeImage(request *http.Request, filePath string) *image.NRGBA {
|
||||
|
||||
diskFile, err := os.Open(filePath)
|
||||
@ -135,52 +104,54 @@ func (this *ImageCacheService) ResizeImage(request *http.Request, filePath strin
|
||||
|
||||
_, imageResizeM, imageResizeW, imageResizeH := this.ResizeParams(request)
|
||||
|
||||
//单边缩略
|
||||
if imageResizeM == "fit" {
|
||||
//将图缩略成宽度为100,高度按比例处理。
|
||||
//fit mode.
|
||||
if imageResizeW != 0 {
|
||||
//eg. width = 100 height auto in proportion
|
||||
|
||||
src, err := imaging.Decode(diskFile)
|
||||
this.PanicError(err)
|
||||
return imaging.Resize(src, imageResizeW, 0, imaging.Lanczos)
|
||||
|
||||
} else if imageResizeH != 0 {
|
||||
//将图缩略成高度为100,宽度按比例处理。
|
||||
//eg. height = 100 width auto in proportion
|
||||
|
||||
src, err := imaging.Decode(diskFile)
|
||||
this.PanicError(err)
|
||||
return imaging.Resize(src, 0, imageResizeH, imaging.Lanczos)
|
||||
|
||||
} else {
|
||||
panic("单边缩略必须指定宽或者高")
|
||||
panic(result.BadRequest("mode fit required width or height"))
|
||||
}
|
||||
} else if imageResizeM == "fill" {
|
||||
//固定宽高,自动裁剪
|
||||
//fill mode. specify the width and height
|
||||
if imageResizeW > 0 && imageResizeH > 0 {
|
||||
src, err := imaging.Decode(diskFile)
|
||||
this.PanicError(err)
|
||||
return imaging.Fill(src, imageResizeW, imageResizeH, imaging.Center, imaging.Lanczos)
|
||||
|
||||
} else {
|
||||
panic("固定宽高,自动裁剪 必须同时指定宽和高")
|
||||
panic(result.BadRequest("mode fill required width and height"))
|
||||
}
|
||||
} else if imageResizeM == "fixed" {
|
||||
//强制宽高缩略
|
||||
//fixed mode
|
||||
if imageResizeW > 0 && imageResizeH > 0 {
|
||||
src, err := imaging.Decode(diskFile)
|
||||
this.PanicError(err)
|
||||
return imaging.Resize(src, imageResizeW, imageResizeH, imaging.Lanczos)
|
||||
|
||||
} else {
|
||||
panic("强制宽高缩略必须同时指定宽和高")
|
||||
panic(result.BadRequest("mode fixed required width and height"))
|
||||
}
|
||||
} else {
|
||||
panic("不支持" + imageResizeM + "处理模式")
|
||||
panic(result.BadRequest("not support mode %s", imageResizeM))
|
||||
}
|
||||
}
|
||||
|
||||
//缓存一张图片
|
||||
//cache an image
|
||||
func (this *ImageCacheService) cacheImage(writer http.ResponseWriter, request *http.Request, matter *Matter) *ImageCache {
|
||||
|
||||
//当前的文件是否是图片,只有图片才能处理。
|
||||
//only these image can do.
|
||||
extension := util.GetExtension(matter.Name)
|
||||
formats := map[string]imaging.Format{
|
||||
".jpg": imaging.JPEG,
|
||||
@ -197,19 +168,18 @@ func (this *ImageCacheService) cacheImage(writer http.ResponseWriter, request *h
|
||||
|
||||
format, ok := formats[extension]
|
||||
if !ok {
|
||||
panic("该图片格式不支持处理")
|
||||
panic(result.BadRequest("not support this kind of image's (%s) resize", extension))
|
||||
}
|
||||
|
||||
user := this.userDao.FindByUuid(matter.UserUuid)
|
||||
|
||||
//resize图片
|
||||
dstImage := this.ResizeImage(request, matter.AbsolutePath())
|
||||
|
||||
cacheImageName := util.GetSimpleFileName(matter.Name) + "_" + mode + extension
|
||||
cacheImageRelativePath := util.GetSimpleFileName(matter.Path) + "_" + mode + extension
|
||||
cacheImageAbsolutePath := GetUserCacheRootDir(user.Username) + util.GetSimpleFileName(matter.Path) + "_" + mode + extension
|
||||
|
||||
//创建目录。
|
||||
//create directory
|
||||
dir := filepath.Dir(cacheImageAbsolutePath)
|
||||
util.MakeDirAll(dir)
|
||||
|
||||
@ -220,15 +190,13 @@ func (this *ImageCacheService) cacheImage(writer http.ResponseWriter, request *h
|
||||
this.PanicError(e)
|
||||
}()
|
||||
|
||||
//处理后的图片存放在本地
|
||||
//store on disk after handle
|
||||
err = imaging.Encode(fileWriter, dstImage, format)
|
||||
this.PanicError(err)
|
||||
|
||||
//获取新文件的大小
|
||||
fileInfo, err := fileWriter.Stat()
|
||||
this.PanicError(err)
|
||||
|
||||
//相关信息写到缓存中去
|
||||
imageCache := &ImageCache{
|
||||
Name: cacheImageName,
|
||||
UserUuid: matter.UserUuid,
|
||||
|
Reference in New Issue
Block a user