分享

利用在图片上中添加文字最终生成海报的代码实现

 goodwangLib 2018-03-17

思想和行动,总要有一个不能落后于人。


现在基本的输入工程,交互功能已经实现,到了最重要的一个功能,就是把文字和图片实现一个重合。

具体怎么实现我上网查了一下,发现了通过<canvas>标签利用js可以实现这个功能。


什么是 Canvas?

HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成.

<canvas> 标签只是图形容器,您必须使用脚本来绘制图形。

你可以通过多种方法使用Canva绘制路径,盒、圆、字符以及添加图像。

创建一个画布(Canvas)

一个画布在网页中是一个矩形框,通过 <canvas> 元素来绘制.

注意: 默认情况下 <canvas> 元素没有边框和内容。

<canvas>简单实例如下:

<canvas id="myCanvas" width="200" height="100"></canvas>

注意: 标签通常需要指定一个id属性 (脚本中经常引用), width 和 height 属性定义的画布的大小.

提示:你可以在HTML页面中使用多个 <canvas> 元素.

使用 style 属性来添加边框:

使用 JavaScript 来绘制图像

canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:

实例

<script>
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);
</script>

实例解析:

首先,找到 <canvas> 元素:

var c=document.getElementById("myCanvas");

然后,创建 context 对象:

var ctx=c.getContext("2d");

getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。

下面的两行代码绘制一个红色的矩形:

ctx.fillStyle="#FF0000";
ctx.fillRect(0,0,150,75);

设置fillStyle属性可以是CSS颜色,渐变,或图案。fillStyle 默认设置是#000000(黑色)。

fillRect(x,y,width,height) 方法定义了矩形当前的填充方式。

关于fileRect中的参数,实际上width是宽,height是高,而x,y是距离原点的相对位置,例如

当设置为(0,0,150,75)的时候


如果设置为20,5,75,150的时候



上面提到的画一个矩形框,接下来画一条线呢?


Canvas - 路径

在Canvas上画线,我们将使用以下两种方法:

  • moveTo(x,y) 定义线条开始坐标  // 起点位置,这个位置是相对于画布的canvas的原点
  • lineTo(x,y) 定义线条结束坐标    // 终点位置,同样也是相对于画布的

绘制线条我们必须使用到 "ink" 的方法,就像stroke().

实例

定义开始坐标(0,0), 和结束坐标 (200,100). 然后使用 stroke() 方法来绘制线条:

JavaScript:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");//其中前面这两句,更像是canva的标配
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.stroke();

尝试一下 »


在canvas中绘制圆形, 我们将使用以下方法:

  • arc(x,y,r,start,stop)

实际上我们在绘制圆形时使用了 "ink" 的方法, 比如 stroke() 或者 fill().

实例

使用 arc() 方法 绘制一个圆:

JavaScript:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.arc(95,50,40,0,2*Math.PI);
ctx.stroke();

尝试一下 »


Canvas - 文本

使用 canvas 绘制文本,重要的属性和方法如下:

  • font - 定义字体
  • fillText(text,x,y) - 在 canvas 上绘制实心的文本
  • strokeText(text,x,y) - 在 canvas 上绘制空心的文本

使用 fillText():

实例

使用 "Arial" 字体在画布上绘制一个高 30px 的文字(实心):

JavaScript:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.font="30px Arial";
ctx.fillText("Hello World",10,50);

尝试一下 »

使用 strokeText():

实例

使用 "Arial" 字体在画布上绘制一个高 30px 的文字(空心):

JavaScript:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.font="30px Arial";
ctx.strokeText("Hello World",10,50);

尝试一下 »

Canvas - 图像

把一幅图像放置到画布上, 使用以下方法:

  • drawImage(image,x,y)

使用图像:

The Scream

实例

把一幅图像放置到画布上:

JavaScript:

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById("scream");
ctx.drawImage(img,10,10);

尝试一下 »



所以最后我用js功能实现了这个代码 当时我的具体代码是这样的

<body>

<canvas id="cv" width="400" height="400"></canvas>
<script type="text/javascript">
var cv = document.getElementById('cv');
var ctx = cv.getContext('2d');
var zi = "添加的1232454566"


var img = document.createElement('img');
img.onload = function(){


    ctx.drawImage(img, 0, 0, 400, 400);
    ctx.font = 'bold 50px Arial';


    ctx.fillStyle = 'black';
    if (zi.length > 5) {
    ctx.fillText(zi, 20, 280);
    }else{
    ctx.fillText(zi, 10, 180);
    }
   
}
img.src = '/1.png';


</script>>
</body>


简单解释一下就是 

首先创建一个画布 canvas,可以设置他的高低,位置的的话应该可以通过style进行设置,然后就可以js来对canvas进行新图片的生成了。

 var cv =document.getElementById('cv')这句话是得到ID为cv的元素,也就是找到canvas 这个元素。

var ctx = cv.getContext('2d');  ————按照上面的解释就是在2维图像中的一个固定用法,内建对象。可以实现多种方法。也许西面的drawImage就是其中的方法。


var zi = ”添加的123456789“;设置待添加的文字。

var image = document.creatElement('img'); 创建一个img标签元素

img.onload = function(){

ctx.drawImage(img,0,0,400,400);   \\——————drawImage一共传入了五个参数,其中img是待合成的图片,0,0是待合成的image相对canvas的位置,400,400是新图片宽 和高,

ctx.font = 'bold 50px Arial';----可以设置添加文字的字体


ctx.fillStyle ="black"; // 可以设置添加文字的颜色

if (zi.length >5){

ctx.fillText(zi,20,280); //添加文字 设置他们的位置

}else{

ctx.fillText(zi,10,180);

}

img.src = '/1.png';  //添加img的地址  

}

 这里是简单的将图片绘制到画布的过程中,主要运用了canvas,getContext(2d),drawImage这几个功能。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多