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 mapreduce工作原理简析
Nov 25 Javascript
JavaScript全排列的六种算法 具体实现
Jun 29 Javascript
Javascript 多浏览器兼容总结(实战经验)
Oct 30 Javascript
jQuery中insertBefore()方法用法实例
Jan 08 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
Mar 11 Javascript
完美实现仿QQ空间评论回复特效
May 06 Javascript
非常实用的12个jquery代码片段
Nov 02 Javascript
js匿名函数作为函数参数详解
Jun 01 Javascript
bootstrap学习笔记之初识bootstrap
Jun 21 Javascript
node.js学习之事件模块Events的使用示例
Sep 28 Javascript
es6中使用map简化复杂条件判断操作实例详解
Feb 19 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
Jul 20 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
基于mysql的论坛(6)
2006/10/09 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
php更新cookie内容的详细方法
2019/09/30 PHP
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
JavaScript闭包实例讲解
2014/04/22 Javascript
jquery队列函数用法实例
2014/12/16 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
微信小程序 教程之列表渲染
2016/10/18 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
JS前端知识点offset,scroll,client,冒泡,事件对象的应用整理总结
2019/06/27 Javascript
python3+PyQt5实现柱状图
2018/04/24 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
python实现二维插值的三维显示
2018/12/17 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
2020/02/26 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
实习心得体会
2014/01/02 职场文书
社团活动策划书范文
2014/01/09 职场文书
旅游个人求职信范文
2014/01/30 职场文书
项目合作协议书
2014/09/23 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
Java并发编程之原子性-Atomic的使用
2022/03/16 Java/Android
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
React更新渲染原理深入分析
2022/12/24 Javascript