go: 生成缩略图
一,安装第三方库
$ go get -u github.com/disintegration/imaging
go: downloading golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8
go: downloading golang.org/x/image v0.31.0
go: added github.com/disintegration/imaging v1.6.2
go: added golang.org/x/image v0.31.0
二,代码:
函数:
//生成缩略图
func MakeThumbImage(orig,thumb string,size int) {
//得到图片的宽高
fileImg, err := os.Open(orig) // 替换为你的图片文件路径
if err != nil {
//panic(err)
}
defer fileImg.Close()
img, _, err := image.DecodeConfig(fileImg)
if err != nil {
//panic(err)
}
fmt.Printf("Width: %d, Height: %d\n", img.Width, img.Height)
//根据大图生成缩略图
src, err := imaging.Open(orig)
if err != nil {
//log.Fatalf("failed to open image: %v", err)
}
//生成缩略图,使长边始终为指定的长度
width:=0
height:=0
if img.Width>= img.Height {
width = size
height = 0
} else {
height = size
width = 0
}
//生成缩略图
dsc := imaging.Resize(src, width, height, imaging.Lanczos)
//保存缩略图
err = imaging.Save(dsc, thumb)
}
controller中调用:
//接收上传,多张图片
func (ic *MediaController) Uploaded(c *gin.Context) {
//得到form
form,err:=c.MultipartForm()
//得到文件列表
files:=form.File["f1m"]
//错误处理
if err != nil {
global.NewResult(c).ErrorCode(500,"图片上传失败",nil)
return
}
idStr:=global.FormattedNow("20060102150405");
dateStr:=global.FormattedNow("20060102");
//原图路径
origDir := "./data/ware/"+dateStr
//如果目录不存在,则创建它
if global.IsDirExists(origDir) == false {
// 创建多级目录
err := os.MkdirAll(origDir, 0755)
if err != nil {
fmt.Println(err)
}
}
//预览图路径
preDir := "./static/ware/"+dateStr
//如果目录不存在,则创建它
if global.IsDirExists(preDir) == false {
// 创建多级目录
err := os.MkdirAll(preDir, 0755)
if err != nil {
fmt.Println(err)
}
}
//处理文件
var images []string
for i,f:=range files{
//fmt.Println(f.Filename)
istr := strconv.Itoa(i)
//保存为原图
origImage := origDir+"/"+idStr+"_"+istr+".jpg"
c.SaveUploadedFile(f,origImage)
//生成缩略图
preImage := preDir+"/"+idStr+"_"+istr+".jpg"
global.MakeThumbImage(origImage,preImage,400)
//返回预览图的url
imageUrl := "/static/ware/"+dateStr+"/"+idStr+"_"+istr+".jpg"
images = append(images, imageUrl)
}
global.NewResult(c).Success(images)
}
三,测试效果:
返回的url是生成的长边为400的缩略图

浙公网安备 33010602011771号