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的缩略图

image

 

posted @ 2025-09-20 09:51  刘宏缔的架构森林  阅读(24)  评论(0)    收藏  举报