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 相关文章推荐
JS写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
jquery监控数据是否变化(修正版)
Apr 12 Javascript
js添加table的行和列 具体实现方法
Jul 22 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
May 18 Javascript
javascript实现checkbox全选的代码
Apr 30 Javascript
jQuery中 attr() 方法使用小结
May 03 Javascript
jquery实现点击展开列表同时隐藏其他列表
Aug 10 Javascript
JavaScript Split()方法
Dec 18 Javascript
JavaScript中Window对象的属性及事件
Dec 25 Javascript
Javascript技术栈中的四种依赖注入小结
Feb 27 Javascript
jquery dataTable 获取某行数据
May 05 jQuery
详解element-ui 表单校验 Rules 配置 常用黑科技
Jul 11 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
php中文件上传的安全问题
2006/10/09 PHP
php中explode与split的区别介绍
2012/10/03 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
React Native之TextInput组件解析示例
2017/08/22 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
vue cli 全面解析
2018/02/28 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
详解python破解zip文件密码的方法
2020/01/13 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
啤酒销售实习自我鉴定
2013/09/24 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
2014植树节活动总结
2014/03/11 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
公司租房协议书范本
2014/10/08 职场文书
小浪底导游词
2015/02/12 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
Java设计模式之享元模式示例详解
2022/03/03 Java/Android