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 继承的实现
Jul 09 Javascript
几个有趣的Javascript Hack
Jul 24 Javascript
判断多个input type=file是否有已经选择好文件的代码
May 23 Javascript
javascript克隆对象深度介绍
Nov 20 Javascript
Jquery 动态生成表格示例代码
Dec 24 Javascript
Three.js学习之网格
Aug 10 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
Sep 27 Javascript
iView-admin 动态路由问题的解决方法
Oct 03 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
Apr 11 Javascript
解决layui的input独占一行的问题
Sep 10 Javascript
vue页面跳转实现页面缓存操作
Jul 22 Javascript
Vue2.0搭建脚手架
Mar 13 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二维码生成以及下载实现
2017/09/28 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
2017/09/29 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
财务与信息服务专业推荐信
2013/11/28 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
交通安全横幅标语
2014/10/07 职场文书
2014年校长工作总结
2014/12/11 职场文书
2015年外联部工作总结
2015/04/03 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript