js通过canvas生成图片缩略图


Posted in Javascript onOctober 02, 2020

现今大部分的网络应用在上传图片的时候都会同时保存几种尺寸的图片,专业术语也就是生成缩略图,而对于生成缩略图一般做法是通过后端语言php等来生成,但是为了给服务器减压,我们或许可以从前端来着手,先生成好不同尺寸的缩略图,传给后端,而后端只需要将前端传过来的图片进行存储就好了。

使用Canvas我们可以轻松生成各种尺寸的图片,具体实现如下:

function resizeImage(src,callback,w,h){
 var canvas = document.createElement("canvas"),
  ctx = canvas.getContext("2d"),
  im = new Image();
  w = w || 0,
  h = h || 0;
 im.onload = function(){
  //为传入缩放尺寸用原尺寸
  !w && (w = this.width);
  !h && (h = this.height);
  //以长宽最大值作为最终生成图片的依据
  if(w !== this.width || h !== this.height){
   var ratio;
   if(w>h){
    ratio = this.width / w;
    h = this.height / ratio;
   }else if(w===h){
    if(this.width>this.height){
     ratio = this.width / w;
     h = this.height / ratio;
    }else{
     ratio = this.height / h;
     w = this.width / ratio;
    }
   }else{
    ratio = this.height / h;
    w = this.width / ratio;
   }
  }
  //以传入的长宽作为最终生成图片的尺寸
  if(w>h){
   var offset = (w - h) / 2;
   canvas.width = canvas.height = w;
   ctx.drawImage(im,0,offset,w,h);
  }else if(w<h){
   var offset = (h - w) / 2;
   canvas.width = canvas.height = h;
   ctx.drawImage(im,offset,0,w,h);
  }else{
   canvas.width = canvas.height = h;
   ctx.drawImage(im,0,0,w,h);
  }
  callback(canvas.toDataURL("image/png"));
 }
 im.src = src;
}

在线实例地址:http://demo.3water.com/js/2020/thumbnail/,图片素材是拿的我们做的一个相框制作应用的截图,有兴趣的朋友可以联系我哦,大家一起讨论,一起玩。

Javascript 相关文章推荐
srcElement表格样式
Sep 03 Javascript
JavaScript实现控制打开文件另存为对话框的方法
Apr 17 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
jQuery往textarea中光标所在位置插入文本的方法
Jun 26 Javascript
基于jQuery实现淡入淡出效果轮播图
Jul 31 Javascript
js实现倒计时关键代码
May 05 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
Aug 16 Javascript
React学习之事件绑定的几种方法对比
Sep 24 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
Oct 31 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 Javascript
vue读取本地的excel文件并显示在网页上方法示例
May 29 Javascript
基于ant design日期控件使用_仅月份的操作
Oct 27 Javascript
JS检测浏览器开发者工具是否打开的方法详解
Oct 02 #Javascript
JavaScript检测是否开启了控制台(F12调试工具)
Oct 02 #Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
Oct 02 #Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
Oct 01 #Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
Dec 01 #Javascript
在Vue里如何把网页的数据导出到Excel的方法
Sep 30 #Javascript
jQuery实现二级导航菜单的示例
Sep 30 #jQuery
You might like
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
js 自定义个性下拉选择框示例
2013/08/20 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python创建进程fork用法
2015/06/04 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
python自动裁剪图像代码分享
2017/11/25 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
django 自定义过滤器的实现
2019/02/26 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
Python实现微信小程序支付功能
2019/07/25 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
python list多级排序知识点总结
2019/10/23 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
教师新年寄语
2014/04/03 职场文书
高中生操行评语
2014/04/25 职场文书
导游词开场白
2015/01/31 职场文书
自荐信模板大全
2015/03/27 职场文书
合同审查法律意见书
2015/06/04 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
关于五一放假的通知
2015/08/18 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang