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 相关文章推荐
使用jQueryMobile实现滑动翻页效果的方法
Feb 04 Javascript
JS实现网页Div层Clone拖拽效果
Sep 26 Javascript
Jquery实现的简单轮播效果【附实例】
Apr 19 Javascript
Jquery鼠标放上去显示全名的实现方法
Feb 06 Javascript
深入理解angular2启动项目步骤
Jul 15 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
Oct 21 Javascript
深入理解Vue 单向数据流的原理
Nov 09 Javascript
基于滚动条位置判断的简单实例
Dec 14 Javascript
工作中常用到的ES6语法
Sep 04 Javascript
JS实现根据数组对象的某一属性排序操作示例
Jan 14 Javascript
vue工程全局设置ajax的等待动效的方法
Feb 22 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
Apr 25 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
php猜单词游戏
2015/09/29 PHP
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
Jquery 学习笔记(一)
2009/10/13 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
jQuery中$.extend()用法实例
2015/06/24 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
ES6 十大特性简介
2020/12/09 Javascript
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
Python中的引用和拷贝浅析
2014/11/22 Python
python逆向入门教程
2018/01/15 Python
python查看模块安装位置的方法
2018/10/16 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
Python如何定义有默认参数的函数
2020/08/10 Python
Python之字典添加元素的几种方法
2020/09/30 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
Aveda美国官网:天然护发产品、洗发水、护发素和沙龙
2016/12/09 全球购物
JMS中Topic和Queue有什么区别
2013/05/15 面试题
幼儿园教研活动总结
2014/04/30 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
离职信范文
2015/06/23 职场文书
小学班主任工作随笔
2015/08/15 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
Python的property属性详细讲解
2022/04/11 Python