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 相关文章推荐
5 cool javascript apps
Mar 24 Javascript
非常好用的JsonToString 方法 简单实例
Jul 18 Javascript
JS的千分位算法实现思路
Jul 31 Javascript
基于jQuery实现的图片切换焦点图整理
Dec 07 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
Nov 15 Javascript
jQuery简单实现彩色云标签效果示例
Aug 01 Javascript
什么是JavaScript中的结果值?
Oct 08 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
Dec 16 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
Jan 05 Javascript
bootstrap输入框组使用方法
Feb 07 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
Aug 06 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
Jan 29 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下PHP APACHE MYSQ完整配置
2007/01/02 PHP
ThinkPHP采用模块和操作分析
2011/04/18 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
php文件上传简单实现方法
2015/01/24 PHP
PHP 无限级分类
2017/05/04 PHP
PHP实现的简单在线计算器功能示例
2017/08/02 PHP
javascript实现yield的方法
2013/11/06 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
解析Vue.js中的组件
2018/02/02 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
详解Python中的join()函数的用法
2015/04/07 Python
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
Django 使用logging打印日志的实例
2018/04/28 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
信息专业本科生个人的自我评价
2013/10/28 职场文书
2014年项目工作总结
2014/11/24 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
Docker部署Mysql8的实现步骤
2022/07/07 Servers