怎么用Canvas压缩图片


本文摘自PHP中文网,作者php中世界最好的语言,侵删。

这次给大家带怎么用Canvas压缩图片?用Canvas压缩图片 的注意事项有哪些,下面就是实战案例,一起来看一下。

一、本地图片输入

1. 获取本地文件

1

2

<!--HTML-->

<input type="file" id="choose-img" />

1

2

3

4

5

6

// JS

var chooseImg = document.getElementById("choose-img");

chooseImg.onchange = function(e){

    var file = this.files[0];

    // ……  (省略部分代码后续依次展示,下同)

};


很简单,就是通过type类型为file的按钮来获取本地文件。

2. 判断所获取的本地文件类型

1

2

<!--HTML-->

<div id="result"></div>

1

2

3

4

5

6

7

8

// JS

var result = document.getElementById("result");    // 用于显示图片输出结果,或者错误提示

if(/image/.test(file.type)){     // 判断文件类型是否为图片

    // ……

}

else{

    result.innerHTML = '<span style="color: red;">文件类型有误!</span>';

}


3. 将所获取的本地图片以base64格式输出

1

2

3

4

5

6

7

8

9

10

var img = new Image(),      // 创建图片对象,用于放置原始图片

    reader = new FileReader();

reader.readAsDataURL(file);    // 以base64格式读取并存入FileReader对象的result属性中

reader.onload = function(){

    img.src = this.result;   // 将图片base64字符串直接赋予Image对象的src中

    document.body.insertBefore(img,chooseImg);   // 将输出的图片插入到文件按钮之前

    img.onload = function(){

        // ……

    };

};

二、在Canvas画布中绘制图片

1. 创建画布

1

2

3

4

var canvas = document.createElement('canvas');

canvas.width = img.clientWidth;

canvas.height = img.clientHeight;

var context = canvas.getContext('2d');

注意:画布大小与所输入图片宽高相同。

2. 绘制图片

1

context.drawImage(img,0,0,canvas.width,canvas.height);

三、压缩图片并输出

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

<!--HTML-->

图片压缩比率 : <input id="rate" type="number" min="0" max="100" /> %

// JS

var chooseImg = document.getElementById("choose-img"),

    result = document.getElementById("result");

chooseImg.onchange = function(e){

    var file = this.files[0];

    if(/image/.test(file.type)){

        var img = new Image(),

            reader = new FileReader();

        reader.readAsDataURL(file);

        reader.onload = function(){

            img.src = this.result;

            document.body.insertBefore(img,chooseImg);

            img.onload = function(){

                var canvas = document.createElement('canvas');

                canvas.width = img.clientWidth;

                canvas.height = img.clientHeight;

                var context = canvas.getContext('2d');

                context.drawImage(img,0,0,canvas.width,canvas.height);

                var rate = document.getElementById("rate").value || 100;

                var imgUrl = canvas.toDataURL(file.type,rate/100);

                result.innerHTML = '压缩后:<img src="'+ imgUrl +'" />';

                result.style.display = 'block';

                img.style.display = 'none';

            };

        };

    }

    else{

        result.innerHTML = '<span style="color: red;">文件类型有误!</span>';

    }

};

经测试发现,通过Canvas压缩JPEG格式图片效果最佳,PNG压缩效果不明显,有时反而变得更大。

相信看了这些案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

相关阅读:

H5的块级标签汇总

H5的进阶段内联标签

怎样使用H5调用摄像头

以上就是怎么用Canvas压缩图片的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

canvas引入跨域的图片导致todataurl()报错的问题的解决

html5 canvas常用属性方法(介绍)

用html5 canvas来绘制三角形和矩形等多边形的方法

html5 canvas绘制时指定颜色与透明度的方法

react中如何引入图片

用h5的canvas做恐怖动画

html5中canvas画线有毛边如何解决

html5在canvas中实现自定义路径动画详解

基于html5 canvas的字符串,路径,背景,图片的分析

借助todataurl实现将html5 canvas的内容保存为图片

更多相关阅读请进入《canvas》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...