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 相关文章推荐
FF IE兼容性的修改小结
Sep 02 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
JS图片根据鼠标滚动延时加载的实例代码
Jul 13 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
jQuery实现图片渐入渐出切换展示效果
Aug 15 Javascript
js关于getImageData跨域问题的解决方法
Oct 14 Javascript
基于JavaScript实现移动端无限加载分页
Mar 27 Javascript
聊聊JavaScript如何实现继承及特点
Apr 07 Javascript
laydate 显示结束时间不小于开始时间的实例
Aug 11 Javascript
vue导出html、word和pdf的实现代码
Jul 31 Javascript
通过函数作用域和块级作用域看javascript的作用域链
Aug 05 Javascript
浅谈vue限制文本框输入数字的正确姿势
Sep 02 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
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
php使用json_encode对变量json编码
2014/04/07 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
js chrome浏览器判断代码
2010/03/28 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
2016/12/22 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
解决Pycharm 运行后没有输出的问题
2021/02/05 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
旅游节目策划方案
2014/05/26 职场文书
经济管理自荐书
2014/06/09 职场文书
医药销售自我评价200字
2014/09/11 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
详解MySQL中的pid与socket
2021/06/15 MySQL
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers