JS HTML图片显示Canvas 压缩功能


Posted in Javascript onJuly 21, 2017

简单到延伸

最新需要js 文件压缩图片上传 以前没搞过,新手把学习过程分享

一.选择图片并显示

<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8">
  <title>Title</title>
</head>
<body>
<input id="imginput" type="file" accept="image/*" onchange="showImg(this)">
<div id="img1">
  <canvas class="convas01"></canvas>
</div>
</body>
<script>
  window.URL=window.URL||window.webkitURL;
  var divimg1 = document.getElementById("img1");
  function showImg(obj){
    var files = obj.files;
    var img = new Image();
    img.width = 100;
    if(window.URL){
      img.src = window.URL.createObjectURL(files[0]);
    }else{
      //opera不支持createObjectURL/revokeObjectURL方法。需要用FileReader对象来处理
      var reader = new FileReader();
      reader.readAsDataURL(files[0]);
      reader.onload = function(e){
        img.src = this.result;
        img.width = 200;
        img.id="img01";
        divimg1.appendChild(img);
      }
    }
    img.id="img01";
    divimg1.appendChild(img);
  }
</script>
</html>

二.使用canvas代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8">
  <title>Title</title>
</head>
<body>
 <input id="imginput" type="file" accept="image/*" onchange="showImg(this)">
 <div id="img1">
  <canvas id="convas01"></canvas>
 </div>
</body>
 <script>
  window.URL=window.URL||window.webkitURL;
  var divimg1 = document.getElementById("img1");
  var convas = document.getElementById("convas01");
  var ht = convas01.getContext("2d");
  convas.width = 200;
  convas.height = 200;
   function showImg(obj){
     var files = obj.files;
     var img = new Image();
     img.width = 200;
    if(window.URL){
      img.src = window.URL.createObjectURL(files[0]);
      img.onload = function(e){
        window.URL.revokeObjectURL(this.src);//方便引用无效回收
        ht.clearRect(0, 0, convas.width, convas.width);//clearRect() 方法清空给定矩形内的指定像素。
        ht.drawImage(img,0,0,convas.width,convas.height);
        convas.toDataURL("image/png");
      }
    }else{
      //opera不支持createObjectURL/revokeObjectURL方法。需要用FileReader对象来处理
      var reader = new FileReader();
      reader.readAsDataURL(files[0]);
      reader.onload = function(){
        img.src = this.result;
        img.width = 200;
        img.id="img01";
        divimg1.appendChild(img);
      }
    }
   }
 </script>
</html>

 三.压缩处理

<!DOCTYPE html>
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8">
  <title>Title</title>
</head>
<body>
 <input id="imginput" type="file" accept="image/*" onchange="showImg(this)">
 <div id="img1">
   canvas图片
  <canvas id="convas01"></canvas>
 </div>
<div id="img2">
压缩图片
</div>
</body>
 <script>
  window.URL=window.URL||window.webkitURL;
  var divimg1 = document.getElementById("img1");
  var divimg2 = document.getElementById("img2");
  var convas = document.getElementById("convas01");
  var ht = convas01.getContext("2d");
  convas.width = 200;
  convas.height = 200;
   function showImg(obj){
     var files = obj.files;
     var img = new Image();
     img.width = 200;
    if(window.URL){
      img.src = window.URL.createObjectURL(files[0]);
      img.onload = function(e){
        window.URL.revokeObjectURL(this.src);//方便引用无效回收
        ht.drawImage(img,0,0,convas01.width,convas01.height);
        var imgdata = convas.toDataURL("image/png");
        //将canvas转化成Blob对象
        var imgobj = new Image();
        var blob =dataURLtoBlob(imgdata);
        var url = window.URL.createObjectURL(blob);
        imgobj.onload = function(e){
          window.URL.revokeObjectURL(this.src);
        }
        imgobj.src= url;
        divimg2.appendChild(imgobj);
      }
    }else{
      //opera不支持createObjectURL/revokeObjectURL方法。需要用FileReader对象来处理
      var reader = new FileReader();
      reader.readAsDataURL(files[0]);
      reader.onload = function(){
        img.src = this.result;
        img.width = 200;
        img.id="img01";
        divimg1.appendChild(img);
      }
    }
   }
  function dataURLtoBlob(dataurl) {
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
      u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], {type:mime});
  }
 </script>
</html>

四.分辨率调节尝试

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    *{
      margin:0;padding:0;
    }
    body{
      width:100%;height:100%;background:black;
    }
    canvas{
      width:800px;height:480px;outline:1px solid pink;position:absolute;
      left:0;top:0;right:0;bottom:0;margin:auto;
    }
  </style>
</head>
<body>
<button>240x120</button>
<button>320x240</button>
<button>480x320</button>
<button>640x420</button>
<button>800x480</button>
<canvas id="canvasId" width="480" height="320">
  Your browser does not support the canvas element.
</canvas>
<script>
  var canvas = document.getElementById('canvasId');
  var context = canvas.getContext('2d');
  var btns = document.getElementsByTagName('button');
  var resolution = [
    [240, 120],
    [320, 240],
    [480, 320],
    [640, 420],
    [800, 480]
  ];
  //canvas分辨率
  var resolutionW = canvas.getAttribute('width');
  var resolutionH = canvas.getAttribute('height');
  //canvas大小
  var sizeW = canvas.offsetWidth;
  var sizeH = canvas.offsetHeight;
  console.log(resolutionW);
  console.log(resolutionH);
  console.log(sizeW);
  console.log(sizeH);
  var img = new Image();
  img.src = "http://img5.niutuku.com/phone/1301/0920/0920-niutuku.com-483082.jpg"; //这张图片像素为800x480
  img.onload = function() {
    draw(3);
    for (var i = 0; i < btns.length; i++) {
      (function(i) {
        btns[i].onclick = function() {
          draw(i);
        }
      })(i);
    }
  }
  function draw(i) {
    canvas.setAttribute('width', resolution[i][0]);
    canvas.setAttribute('height', resolution[i][1]);
    context.clearRect(0, 0, sizeW, sizeH);
    context.drawImage(img, 0, 0, sizeW, sizeH, 0, 0, resolution[i][0], resolution[i][1]);
  }
</script>
</body>
</html>

总结

以上所述是小编给大家介绍的JS HTML图片显示Canvas 压缩功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
jquery 1.3.2 IE8中的一点点的小问题解决方法
Jul 10 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
JS实现的表格行鼠标点击高亮效果代码
Nov 27 Javascript
AngularJS基础 ng-mouseover 指令简单示例
Aug 02 Javascript
微信小程序 参数传递详解
Oct 24 Javascript
Javascript 两种刷新方法以及区别和适用范围
Jan 17 Javascript
Bootstrap笔记—折叠实例代码
Mar 13 Javascript
基于vue-video-player自定义播放器的方法
Mar 21 Javascript
JavaScript引用类型Array实例分析
Jul 24 Javascript
Angularjs之ngModel中的值验证绑定方法
Sep 13 Javascript
OpenLayers3实现鼠标移动显示坐标
Sep 25 Javascript
JavaScript 用fetch 实现异步下载文件功能
Jul 21 #Javascript
详解vue 模版组件的三种用法
Jul 21 #Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
Jul 21 #Javascript
vue-resource调用promise取数据方式详解
Jul 21 #Javascript
Vue resource中的GET与POST请求的实例代码
Jul 21 #Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
Jul 21 #Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 #Javascript
You might like
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
php模拟用户自动在qq空间发表文章的方法
2015/01/07 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
JavaScript中URL编码函数代码
2011/01/11 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
Django 开发环境配置过程详解
2019/07/18 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
在服务器上安装python3.8.2环境的教程详解
2020/04/26 Python
python开发一款翻译工具
2020/10/10 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
如何将整数int转换成字串String
2014/03/21 面试题
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
水电施工员岗位职责
2015/04/11 职场文书
检讨书格式
2015/05/07 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL