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 相关文章推荐
TextArea设置MaxLength属性最大输入值的js代码
Dec 21 Javascript
简介JavaScript中search()方法的使用
Jun 06 Javascript
你所未知的3种Node.js代码优化方式
Feb 25 Javascript
flag和jq on 的绑定多个对象和方法(必看)
Feb 27 Javascript
JavaScript中arguments和this对象用法分析
Aug 08 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
JavaScript动态创建二维数组的方法示例
Feb 01 Javascript
如何从头实现一个node.js的koa框架
Jun 17 Javascript
深入探索VueJS Scoped CSS 实现原理
Sep 23 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
Nov 09 Javascript
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 Vue.js
vue组件的路由高亮问题解决方法
May 11 Vue.js
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面向对象的方法重载两种版本比较
2008/09/08 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
javascript制作2048游戏
2015/03/30 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
jQuery页面刷新(局部、全部)问题分析
2016/01/09 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
Python字符串和文件操作常用函数分析
2015/04/08 Python
python中map的基本用法示例
2018/09/10 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
python爬虫之遍历单个域名
2019/11/20 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
小学秋季运动会报道稿
2014/09/30 职场文书
四风问题个人剖析材料
2014/10/07 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
大客户经理岗位职责
2015/04/09 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书
担保书范文
2019/07/09 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
总结Python常用的魔法方法
2021/05/25 Python
python脚本框架webpy模板控制结构
2021/11/20 Python
python 实现图片特效处理
2022/04/03 Python
如何利用python实现Simhash算法
2022/06/28 Python
Go语言怎么使用变长参数函数
2022/07/15 Golang