canvas中文字和图片的绘制

摘要:
DOCTYPEhtml˃canvas。画布{border:1pxsolidnpink;}您的浏览器不支持canvasvarcanvas=document。按ID获取元素;varctx=画布。getContext;//上下文,绘图环境varstr=“hello cyy”//文本大小ctx。font=“50pxsans serif”//水平居中的文本ctx。textAlign=“center”//字符str位置100100ctx。fillText;ctx。strokeText;应该注意的是,设置不是画布的水平中心,而是您接下来将自己设置为文本中心的fillText或strokeText中的坐标。如果要将其设置为画布的中心,则需要将相应的坐标点设置为画布中心˂!

绘制文字

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid pink;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        var str="hello cyy";
        //文字大小
        ctx.font="50px sans-serif";
        //字符str
        //位置100,100
        ctx.fillText(str,100,100);
        ctx.strokeText(str,100,200);

    
    </script>
</body>
</html>

canvas中文字和图片的绘制第1张

水平对齐方式:left  center  right

文字居中,textAlign="center"

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid pink;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        var str="hello cyy";
        //文字大小
        ctx.font="50px sans-serif";
        //文字水平居中
        ctx.textAlign="center";
        //字符str 位置100,100
        ctx.fillText(str,100,100);
        ctx.strokeText(str,100,200);

    
    </script>
</body>
</html>

canvas中文字和图片的绘制第2张

需要注意的是,设置的并不是到画布的水平居中,而是以接下来你自己设置的fillText或者strokeText中的坐标作为文字的中心

如果想要设置到画布的居中,就需要对应的坐标点设为画布中心点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid pink;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        var str="hello cyy";
        //文字大小
        ctx.font="50px sans-serif";
        //文字水平居中
        ctx.textAlign="center";
        //字符str 在画布位置水平居中
        ctx.fillText(str,300,200);

    
    </script>
</body>
</html>

canvas中文字和图片的绘制第3张

垂直对齐方式 top  middle  bottom

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid pink;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        var str="hello cyy";
        //文字大小
        ctx.font="50px sans-serif";
        //文字水平居中,以300位为水平中心
        ctx.textAlign="center";
        //文字垂直居中 ,以0为垂直中心
        ctx.textBaseline="middle";
        //字符str 
        ctx.fillText(str,300,0);

    
    </script>
</body>
</html>

canvas中文字和图片的绘制第4张

如果需要文字全部显示,就设置垂直为top

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid pink;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        var str="hello cyy";
        //文字大小
        ctx.font="50px sans-serif";
        //文字水平居中,以300位为水平中心
        ctx.textAlign="center";
        //文字垂直居中 ,以0为垂直顶对齐
        ctx.textBaseline="top";
        //字符str 
        ctx.fillText(str,300,0);

    
    </script>
</body>
</html>

canvas中文字和图片的绘制第5张

获取文本宽度 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid pink;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        var str="hello cyy";
        //文字大小
        ctx.font="50px sans-serif";
        //文字水平居中,以300位为水平中心
        ctx.textAlign="center";
        //文字垂直居中 ,以0为垂直顶对齐
        ctx.textBaseline="top";
        //字符str 
        ctx.fillText(str,300,0);
        //获取文本宽度
        var width=ctx.measureText(str).width;
        console.log(width);

    
    </script>
</body>
</html>

canvas中文字和图片的绘制第6张

遗憾的是,canvas并没有提供获取高度的接口,因此需要通过文字大小或者自己去调试来获得

图片的绘制

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid pink;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        //加载图片
        var img=new Image();
        img.src="img/right.png";

        //绘制图片
        ctx.drawImage(img,0,0);

    
    </script>
</body>
</html>

canvas中文字和图片的绘制第7张

 打开以后发现并没有图片,这是因为图片的加载需要一定时间

因此绘制必须要在图片加载完成之后才能进行

使用onload函数来判定是否加载完成

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid pink;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="400">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        //加载图片
        var img=new Image();
        img.src="img/right.png";

        //图片加载完成后
        img.onload=function(){
            //绘制图片
            ctx.drawImage(img,0,0);
        }
       
    
    </script>
</body>
</html>

canvas中文字和图片的绘制第8张

给自己做一个头像,我又臭美了哈哈哈

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid #abcdef;background-color: #a9add2;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="600">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        //加载图片
        var img=new Image();
        img.src="img/cyy_small.png";

        //图片加载完成后
        img.onload=function(){
            //绘制图片
            ctx.drawImage(img,100,50);
        }
       
    
    </script>
</body>
</html>

canvas中文字和图片的绘制第9张

设置图像尺寸

ctx.drawImage(img,100,50,width,height);

后面新增两个参数填写图片的宽高

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid #abcdef;background-color: #a9add2;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="600">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        //加载图片
        var img=new Image();
        img.src="img/cyy_small.png";

        //图片加载完成后
        img.onload=function(){
            //绘制图片
            //原图400,*600,缩放为200*300
            ctx.drawImage(img,100,50,200,300);
        }
       
    
    </script>
</body>
</html>

canvas中文字和图片的绘制第10张

图片的裁剪,需要

ctx.drawImage(img,要裁剪的起始点坐标,要裁剪的宽高尺寸,绘制区域的起始点坐标,绘制区域的宽高尺寸);

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid #abcdef;background-color: #a9add2;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="600">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        //加载图片
        var img=new Image();
        img.src="img/cyy_small.png";

        //图片加载完成后
        img.onload=function(){
            //绘制图片
            //裁剪出原图的0,0到400,400位置
            //绘制到0,0到400,400位置
            //等于是不进行缩放的效果
            ctx.drawImage(img,0,0,400,300,0,0,400,300);
        }
       
    
    </script>
</body>
</html>

canvas中文字和图片的绘制第11张

裁剪+缩放0.5倍+移动100,100的效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid #abcdef;background-color: #a9add2;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="600">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        //加载图片
        var img=new Image();
        img.src="img/cyy_small.png";

        //图片加载完成后
        img.onload=function(){

      //绘制图片
      //从原图的0,0开始裁剪,宽高400,300
      //从100,100开始绘制,宽高为200,150

            ctx.drawImage(img,0,0,400,300,100,100,200,150);

        }
       
    
    </script>
</body>
</html>

canvas中文字和图片的绘制第12张

图形画刷

首先是star.jpg长这样

canvas中文字和图片的绘制第13张

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid #abcdef;background-color: #a9add2;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="600">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        //加载图片
        var img=new Image();
        img.src="img/star.jpg";

        //图片加载完成后
        img.onload=function(){
            //创建图形画刷,模式为repeat
            var pattern=ctx.createPattern(img,"repeat");
            ctx.fillStyle=pattern;

            //绘制矩形,使用画刷填充
            ctx.fillRect(0,0,canvas.width,canvas.height);
            
        }
       
    
    </script>
</body>
</html>

canvas中文字和图片的绘制第14张

模式总共有四种:no-repeat  repeat-x  repeat-y  repeat

no-repeat的效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas</title>
    <style>
        .canvas{border:1px solid #abcdef;background-color: #a9add2;}
    </style>
</head>
<body>
    <canvas class="canvas" id="canvas" width="600" height="600">您的浏览器不支持canvas</canvas>

    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");//上下文,绘图环境

        //加载图片
        var img=new Image();
        img.src="img/star.jpg";

        //图片加载完成后
        img.onload=function(){
            //创建图形画刷,模式为repeat
            var pattern=ctx.createPattern(img,"no-repeat");
            ctx.fillStyle=pattern;

            //绘制矩形,使用画刷填充
            ctx.fillRect(0,0,canvas.width,canvas.height);
            
        }
       
    
    </script>
</body>
</html>

canvas中文字和图片的绘制第15张

其他两个同理

免责声明:文章转载自《canvas中文字和图片的绘制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Django添加favicon.ico图标KL散度的理解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF 多项选择下拉菜单

背景 项目中有一个多项选择筛选的功能, 由于筛选条件太多, 用户又习惯在平板上进行操作, 所以要求我们把checkbox 放到一个combobox里面, 然后checkbox的选项要在combobox里面显示出来, 再加一个全选功能. 喏, 就是这种效果. 实现     首先, 实现思路是: 1. 自定义一个用户控件 2.添加一个combobox 3...

canvas及lufylegend引擎

随着对canvas的深入了解,发现canvas真是个好东西,也发现android真烂,哎! 最近在用canvas做小游戏,简单的跑酷类,打地鼠类的小游戏做了一遍,今天先写一个打地鼠的制作心得。 PS:以前用JS做过打地鼠的游戏,现在看看真心烂。 首先我使用的是lufylegend.js 1.9.1的版本(非常好用的引擎,强烈推荐)。 在制作过程中先来分析打地...

canvas---绘制图表以及拖拽

1.clientX、offsetX、screenX、pageX、x的区别 clientX、clientY:点击位置距离当前body可视区域的x,y坐标 pageX、pageY:对于整个页面来说,包括了被卷去的body部分的长度 screenX、screenY:点击位置距离当前电脑屏幕的x,y坐标 offsetX、offsetY:相对于带有定位的父盒子的...

用html2canvas转html为图片遇到的那些问题

1.图片跨域问题 在html转化为canvas在转化成图片地址的 时候 canvas.toDataURL("image/png") 遇到报错: Access to image at 'png' from origin 'null' has been blocked by CORS policy: Cross origin requests are only...

第六章 前端开发——Vue框架

第六章 前端开发学习——Vue框架 一、Vue介绍 二、Vue实例 三、Vue视图 四、Vue组件 五、Vue过度动画 一、Vue介绍 1.前端框架介绍 A)前端框架有 React      Facebook Angular   Google Vue         全世界 B)Angular、Vue、React的区别 Vue与React React...

[ html canvas 绘制文本 ] canvas绘图实现绘制文本 strokeText fillText方法及textAlign textBaseline font 属性实例演示

1 <!DOCTYPE html> 2 <html lang='zh-cn'> 3 <head> 4 <title>Insert you title</title> 5 <meta name='description' content='this is my page'>...