当前位置: 首页 > news >正文

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:=0height:=0if img.Width>= img.Height {width = sizeheight = 0} else {height = sizewidth = 0}//生成缩略图dsc := imaging.Resize(src, width, height, imaging.Lanczos)//保存缩略图err = imaging.Save(dsc, thumb)
}

controller中调用:

//接收上传,多张图片
func (ic *MediaController) Uploaded(c *gin.Context) {//得到formform,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 []stringfor 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)//返回预览图的urlimageUrl := "/static/ware/"+dateStr+"/"+idStr+"_"+istr+".jpg"images = append(images, imageUrl)}global.NewResult(c).Success(images)}

 

三,测试效果:

返回的url是生成的长边为400的缩略图

image

 

http://www.gsyq.cn/news/8395.html

相关文章:

  • git: 报错: fatal: 协议错误:错误的行长度字符串:This 或 fatal: protocol error: bad line length character: This
  • gin: 打包模板文件、静态文件到二进制文件中
  • gin: 判断是否ajax请求
  • An Empirical Study on Commit Message Generation using LLMs via In-Context Learning 论文笔记
  • Jetpack Navigation - 在 Fragment 中跳转到 Activity(4 种方式) - 详解
  • 强化学习之父 Richard Sutton: 如今AI正进入“经验时代” - 指南
  • 嵌入式笔记系列——UART:TTL-UART、RS-232、RS-422、RS-485 - 指南
  • 实用指南:【保姆级教程】TEXTurePaper运行环境搭建与Stable Diffusion模型本地化
  • 高级数据结构手册
  • 【无人艇协同】基于matlab面向海事安全的双体无人艇分布式协同任务规划(目标函数:总时间满意度)【含Matlab源码 14161期】博士论文 - 教程
  • 深入解析:【Fiora深度解析】手把手教你用固定公网IP搭建专属聊天系统!
  • 使用JavaScript和CSS创建动态高亮导航栏
  • wxt 开发浏览器插件的框架
  • Gridspech 全通关
  • 纯国产GPU性能对比,谁才是国产算力之王?
  • 英伟达入股英特尔,当竞争对手便成协作者,真正受益的......
  • ODT/珂朵莉树 入门
  • 绯闻女孩不只会八卦:从“验明正身”到“抓内鬼”,Gossip的进阶玩法
  • reLeetCode 热题 100- 15. 三数之和 - MKT
  • US$94 T300 Key Programmer Spanish Blue 2016 V16.8 Full
  • US$99 VVDI MB NEC Key Adaptor
  • testuserpython
  • [Nacos/Docker/MCP] Nacos 3.x : 为 AI MCP 而生
  • AIGC拾遗:Flash Attention
  • Python-CSV库
  • C++小白修仙记_LeetCode刷题_双指针
  • 前路漫漫亦灿灿 往事堪堪亦澜澜
  • 现代汽车前瞻杯2025牛客暑期多校训练营3
  • 详细介绍:[新启航]白光干涉仪在微透镜阵列微观 3D 轮廓测量中的应用解析
  • 2023 CCPC 深圳 F