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 相关文章推荐
自己使用jquery写的一个无缝滚动的插件
Apr 30 Javascript
一些老手都不一定知道的JavaScript技巧
May 06 Javascript
jQuery的context属性用法实例
Dec 27 Javascript
JS弹出新窗口被拦截的解决方法
Aug 09 Javascript
浅析JavaScript中var that=this
Feb 17 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
Mar 04 Javascript
详解webpack的配置文件entry与output
Aug 21 Javascript
怎样在vue项目下添加ESLint的方法
May 16 Javascript
javascript实现商品图片放大镜
Nov 28 Javascript
vue npm install 安装某个指定的版本操作
Aug 11 Javascript
封装 axios+promise通用请求函数操作
Aug 11 Javascript
Vue中添加滚动事件设置的方法详解
Sep 14 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
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
小程序实现五星点评效果
2018/11/03 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
python for 循环获取index索引的方法
2019/02/01 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
django云端留言板实例详解
2019/07/22 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
python 实现图片批量压缩的示例
2020/12/18 Python
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
联想C++笔试题
2012/06/13 面试题
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
物理系毕业生自荐书
2014/06/13 职场文书
2015年企业新年寄语
2014/12/08 职场文书
心理学培训心得体会
2016/01/22 职场文书
七年级作文之环保作文
2019/10/17 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
Python函数对象与闭包函数
2022/04/13 Python