canvas学习一之canvas的基本使用

2 篇文章 0 订阅
1 篇文章 0 订阅

一、canvas
1.canvas是html5中的一个标签,通过canvas的getContext得到上下文可以绘图等操作。canvas通过js进行API操作,可以得到想要的图形或动画。
2.html5中canvas有两套尺寸,第一个是元素本身的大小,在标签的属性里指定;还有一个是绘图表面的大小,标签属性和css都可以修改。默认情况下,canvas的元素大小和绘图表面都是300*150;当两者不一致时,浏览器会对画图表面进行缩放,使其符合元素的大小。举个例子如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas基本使用</title>
    <style type="text/css">
        body {
            background: #dddddd;
         }
         #canvas,#canvas1 {
            margin: 20px;
            padding: 20px;
            background: #ffffff;
            border: thin inset #aaaaaa;
            width: 600px;
            height: 300px;
         }
    </style>
</head>
<body>
    <canvas id='canvas'>
        不支持canvas
    </canvas>
    <canvas id="canvas1" width="600" height="300">
        不支持canvas
    </canvas>
</body>
<script type="text/javascript">

    var canvas = document.getElementById('canvas'),
    context = canvas.getContext('2d');
    context.font = '38pt Arial';
    context.fillStyle = 'cornflowerblue';
    context.strokeStyle = 'blue';
    context.fillText("Hello Canvas", canvas.width/2 - 150,
                                 canvas.height/2 + 15);
    context.strokeText("Hello Canvas", canvas.width/2 - 150,
                                   canvas.height/2 + 15);

    var canvas1 = document.getElementById('canvas1'),
    context1 = canvas1.getContext('2d');
    context1.font = '38pt Arial';
    context1.fillStyle = 'cornflowerblue';
    context1.strokeStyle = 'blue';
    context1.fillText("Hello Canvas", canvas1.width/2 - 150,
                                 canvas1.height/2 + 15);
    context1.strokeText("Hello Canvas", canvas1.width/2 - 150,
                                   canvas1.height/2 + 15);
</script>
</html>

当没有在标签中指定宽高时,元素本身默认300*150,绘图表面也是300*150,当在css中修改宽高时,只修改元素本身大小,为600*300,绘图表面没有修改,还是300*150,两者不相等,于是浏览器会对画布进行缩放,使之符合大小。这里是横向竖向都放大2倍。

所以,当使用canvas时,最好在标签写好宽高,如果不可以,还可以使用js脚本给canvas加上宽高。

二、2个属性3个方法
2个属性:
width 画图表面的宽;
height 画图表面的高
3个方法:
getContext():获得绘图对象,一般getContext(“2d”)获得2d绘图对象;
toDateURL(type,quality):获得一个数据地址,这个是将canvas画布中的内容转化为图像,再将图像转为base64编码,最后得到的是一串字符串。type有image/png,image/jpeg两种,虽然base64有image/gif,但经我测试用火狐测试,不可以转成gif(?)。quality是图片的质量,从0-1.0的double数值;
toBlob(callback,type,args) Blob二进制大对象,将图片转成Blob.callback一个以获得的blob为参数的回调函数,type是图片类型,args图片质量;

将上面代码,修改一下,得到两个方法的照片:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>两种方法,将canvas转成图像</title>
    <style type="text/css">
        body {
            background: #dddddd;
         }
         #canvas{
            margin: 20px;
            padding: 20px;
            background: #ffffff;
            border: thin inset #aaaaaa;
            width: 600px;
            height: 300px;
         }
    </style>
</head>
<body>
    <canvas id='canvas' width="600" height="300">
        不支持canvas
    </canvas>
    <img id="img">
</body>
<script type="text/javascript">

    var canvas = document.getElementById('canvas'),
    context = canvas.getContext('2d');
    context.font = '38pt Arial';
    context.fillStyle = 'cornflowerblue';
    context.strokeStyle = 'blue';
    context.fillText("Hello Canvas", canvas.width/2 - 150,
                                 canvas.height/2 + 15);
    context.strokeText("Hello Canvas", canvas.width/2 - 150,
                                   canvas.height/2 + 15);
    var href = canvas.toDataURL("image/png", 0.1);
    var image = document.getElementById("img");//静态获取img节点
    image.src=href;
    canvas.toBlob(function(blob){
        var newImg = document.createElement("img"),//动态生成img节点
        url = URL.createObjectURL(blob);
        newImg.onload = function() {
            URL.revokeObjectURL(url);//加载完成,释放url
        };
        newImg.src = url;
        document.body.appendChild(newImg);
    },"image/png",0.1)
</script>
</html>

两者图像地址不一致:
toDataURL得到data:image/png;base64开头的字符串
toBlob得到blob:null/d871fc67-7a9a-41e1-82b2-9954eca7d198

toDataURL得到图像可以另存为保存到硬盘,但是blob不可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aabond

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值