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 相关文章推荐
JavaScript 继承详解 第一篇
Aug 30 Javascript
js函数模拟显示桌面.scf程序示例
Apr 20 Javascript
在Ubuntu上安装最新版本的Node.js
Jul 14 Javascript
js中实现多态采用和继承类似的方法
Aug 22 Javascript
jQuery实现html元素拖拽
Jul 21 Javascript
JS实现字符串转驼峰格式的方法
Dec 16 Javascript
vue教程之toast弹框全局调用示例详解
Aug 24 Javascript
为输入框加入数字js校验代码分享
Nov 02 Javascript
JavaScript多线程运行库Nexus.js详解
Dec 22 Javascript
微信小程序之判断页面滚动方向的示例代码
Aug 30 Javascript
简单两步使用node发送qq邮件的方法
Mar 01 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
Nov 17 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编写和读取XML的几种方式
2013/01/12 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
JavaScript中的作用域链和闭包
2012/06/30 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
Angular2 路由问题修复详解
2017/03/01 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
vue $router和$route的区别详解
2020/12/02 Vue.js
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
护士自荐信
2013/10/25 职场文书
社会实践评语
2014/04/28 职场文书
搞笑爱情保证书
2014/04/29 职场文书
公民授权委托书
2014/10/15 职场文书
电话营销开场白
2015/05/29 职场文书
小学班主任研修日志
2015/11/13 职场文书
党员心得体会范文2016
2016/01/23 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python
浅谈Redis的事件驱动模型
2022/05/30 Redis