html5上传图片预览压缩代码插件

html5上传图片预览压缩代码插件

这是一款html5基于canvas制作网格布局图片上传预览,带图片压缩显示功能代码。

使用方法
在页面引入以下jquery.min.js文件

1
<script src="js/jquery.min.js"></script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<script>
  (function ($) {
    $.extend({
      //压缩图片,参数1:file对象,参数2:压缩比例
      compress(file,scale) {
        return new Promise(function (resolve,reject) {
          let _scale=scale || 1;
          let cvs = document.createElement('canvas');
          let ctx = cvs.getContext('2d');
          let img = new window.Image();
          let imgType=file.type;
          img.src = URL.createObjectURL(file);
          img.onload=function () {
            cvs.width = img.width*_scale;
            cvs.height = img.height*_scale;
            ctx.drawImage(img, 0, 0, cvs.width, cvs.height);
            resolve(cvs.toDataURL(imgType));
          }
        });
      }
    });
    $.fn.extend({
   
      //复制节点
      cloneNode(num){
        let p=this.parent();
        for (let i=0;i<num;i++){
          p.append(this.clone(true))
        }
      }
    });
    $(function () {
      $('li').cloneNode(6);//复制66个节点
      //点击触发input
      $('li').each(function (i) {
        $(this).click(function () {
          $('input').attr("name",'input_'+i).click();
        })
      });
   
      $("input").change(function () {
        let files=$(this)[0].files[0];//获取files对象
        let index=parseInt(($(this).attr('name')).split("_")[1]);
         //0.5为当前压缩比
        $.compress(files,0.5).then((url)=>{
          $('li').eq(index).css({"background-image": "url("+url+")"});
          //上传到服务器
          $.post('url',{base64:url},()=>{
               
          })
        })
      })
    })
  })(jQuery)
</script>

CSS样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<style>
*{
    padding: 0;
    margin: 0;
}
ul{
    width: 1200px;
    margin: 30px auto;
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: flex-start;
}
ul li{
    background: #00a2d4;
   list-style: none;
    flex-grow:10;
    width: 300px;
    height: 300px;
    margin-right: 20px;
    margin-bottom: 20px;
    border: 1px solid #f2f2f2;
   display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
    background-repeat: no-repeat;
    background-size: cover;
    box-sizing: border-box;
}
</style>

文件信息:

    2

    发表评论