canvas 自定义画布,在画布上增加(边框 图片 文字 )

这篇具有很好参考价值的文章主要介绍了canvas 自定义画布,在画布上增加(边框 图片 文字 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先说下我的功能需求:
通过画布,自定义一个区域大小,在这个区域内:添加背景图片、图中图叠加、画内外边框、设置文字(文字的字体和大小颜色)

效果图
怎么在canvas 画布上输入文字,前端,vue
背景图片就是鸣人和雏田,右下角的属于图中图叠加效果,左下和右下都是分别画的两个区域框

不需要用到上传图片功能的,这一步可以略过,直接看下面 canvasdiv() 方法
1.右下角的小图,我做的是上传图片,上面有个附图上传的按钮,这个用的是element-ui,代码我贴下面了,也可以不选择上传,自己从本地获取一张图片也可以

<el-form-item label="附图上传" prop="dh">
     <div>
          <el-upload class="upload-demo" action="" :on-preview="handlePreview" :on-remove="handleRemove"
              :before-remove="beforeRemove" :on-change="uploadTU" :auto-upload="false" :limit="1"
              list-type="picture" :on-exceed="handleExceed" :file-list="fileList">
              <el-button size="small" type="primary">点击上传附图</el-button>
              <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
          </el-upload>
      </div>
</el-form-item>
//附图上传调用的方法,这里主要是获取了图片的地址,
//这里这个 this.futuimage 会在做附图的时候用到,所以我这里要保存一下这个图片地址
uploadTU(file, filelist) {
   this.futuimage = file.url
},

画布上图、自定义文字、画线

1.先定义一个canvas容器

<div id="div">
    <canvas id="canvas"></canvas>
</div>

2.这个方法自己写个点击事件触发,我是用按钮触发的,按钮代码我就不写了文章来源地址https://www.toymoban.com/news/detail-752033.html

//图片生成pdn的方法
       canvasdiv(dataUrl) {
            var canvas = document.getElementById("canvas");
            canvas.width = 1545;
            canvas.height = 855;
            var ctx = canvas.getContext("2d");

			//这里就是背景图,我获取的是本地图片
            var image = new Image();
            //这里可以放png图片,也可以放图片的base64
            image.src = './img/beijingtu.png'; 

			//图例图片
            var tuli = new Image();
            tuli.src = './img/xiao.png';
			
			//附图图片
            var futu = new Image();
            futu.src = this.futuimage;	//这个我放的是图片的base64,主要给大家说明一下可以放这种类型数据
			
			//从这一步开始,就开始画布了,在画布里设置图片呀 文字呀 边框呀
            image.onload = function () {
                var imgwidth = 1400;	//背景图宽度
                var imgheight = 750;	//背景图高度
                var left = (canvas.width - imgwidth) / 2;
                var top = (canvas.height - imgheight) / 2;
                
				//第一个参数image就是我读取的本地png图片,这里我试过放base64 也可以
				//第二个参数left 就是 x坐标,第三个参数top就是 y坐标 ,坐标轴懂吧 x和y
				//第四个和第五个参数就是背景图的宽和高,单位是像素px
				//多说一句第一个参数 image 看你自己需求放什么,但是我发现base64图片不能自适应
                ctx.drawImage(image, left, top, imgwidth, imgheight);	//背景图上图到画布
                //外框
                ctx.moveTo(left - 20, top - 20); //将画笔移动到坐标 x和y
                ctx.lineTo(left + imgwidth + 20, top - 20); //从画笔位置绘制直线到坐标 x和y
                ctx.lineTo(left + imgwidth + 20, top + imgheight + 20); //从当前位置绘制直线到
                ctx.lineTo(left - 20, top + imgheight + 20); //.从当前位置...
                ctx.closePath(); //闭合线条
                ctx.lineWidth = 3; //线宽
                ctx.strokeStyle = 'black'; //描边颜色
                ctx.stroke(); //渲染直线(描边)

                //最内的框
                ctx.moveTo(left, top); //将画笔移动到坐标
                ctx.lineTo(left + imgwidth, top); //从画笔位置绘制直线到坐标
                ctx.lineTo(left + imgwidth, top + imgheight); //从当前位置绘制直线到
                ctx.lineTo(left, top + imgheight); // 从当前位置
                ctx.closePath(); //闭合线条
                ctx.lineWidth = 1; //线宽
                ctx.strokeStyle = 'black'; //描边颜色
                ctx.stroke(); //渲染直线(描边)
				
				//看一下效果图左下角有个图例,背景色是白色,主要是填充区域颜色需要加这一行代码
                ctx.beginPath(); //开启路径绘制,不加它无法填充区域颜色,
                ctx.moveTo(left, imgheight / 4 * 3 + top); //将画笔移动到坐标
                ctx.lineTo(left + this.tuli_width, imgheight / 4 * 3 + top); //从画笔位置绘制直线到坐标
                ctx.lineTo(left + this.tuli_width, imgheight + top); //从当前位置绘制直线到
                ctx.lineTo(left, imgheight + top); //.从当前位置
                ctx.closePath(); //闭合线条
                ctx.fillStyle = 'white';
                ctx.fill(); //设置封闭图形填充
                ctx.lineWidth = 1; //线宽
                ctx.strokeStyle = 'black'; //描边颜色
                ctx.stroke(); //渲染直线(描边)

                //附图
                ctx.beginPath(); //开启路径绘制,不加它无法填充区域颜色
                ctx.moveTo(imgwidth - 300 + left, imgheight / 4 * 3 + top); //将画笔移动到坐标
                ctx.lineTo(left + imgwidth, imgheight / 4 * 3 + top); //从画笔位置绘制直线到坐标
                ctx.lineTo(left + imgwidth, imgheight + top); //从当前位置绘制直线到
                ctx.lineTo(imgwidth - 300 + left, imgheight + top); //.从当前位置
                ctx.lineWidth = 1; //线宽
                ctx.strokeStyle = 'black'; //描边颜色
                ctx.fillStyle = 'white';
                ctx.fill(); //设置封闭图形填充
                ctx.stroke(); //渲染直线(描边)
                ctx.closePath(); //闭合线条
                ctx.drawImage(futu, imgwidth - 300 + left, imgheight / 4 * 3 + top + 20, 300, imgheight / 4 - 20); //添加附图图片

                //附图俩字下面的横线
                ctx.moveTo(imgwidth - 300 + left, imgheight / 4 * 3 + top + 25); //将画笔移动到坐标
                ctx.lineTo(left + imgwidth, imgheight / 4 * 3 + top + 25);
                ctx.lineWidth = 1; //线宽
                ctx.strokeStyle = 'black'; //描边颜色
                ctx.stroke(); //渲染直线(描边)

                // 绘制文字(文本内容,x坐标,y坐标)
                ctx.font = "13px serif";    //文字大小
                ctx.fillStyle = "black";    //文字颜色
                ctx.textAlign = "center";   //文字居中

                ctx.font = "23px 宋简体"
                ctx.fillText("标题", canvas.width / 2, canvas.height - 835);

                ctx.font = "15px 黑体"
				ctx.fillText("图例", left + 75, imgheight / 4 * 3 + top + 17);
                ctx.fillText("小图区域", imgwidth - 150 + left, imgheight / 4 * 3 + top + 17);

                ctx.font = "13px 黑体"
                ctx.fillText("自定义文字", left - 10, canvas.height - 835);
                ctx.fillText("1:50000", canvas.width / 2, canvas.height - 12);
                ctx.fillText(that.getCurrentTime(), left + imgwidth - 20, canvas.height - 12);
                ctx.fillText("XXX", left - 10, canvas.height - 12);


                //展示生成后的图片效果--第二张图
                var base64 = canvas.toDataURL();
                document.getElementById("base64Img").src = base64;

                const download = document.getElementById("download");
                var ba64 = canvas.toDataURL("image/png");

                // 点击图片下载
                // canvas.onclick = function () {
                //     //download.click();
                //     var input1 = document.getElementById("upload");

                //     if (typeof FileReader === 'undefined') {
                //         alert("抱歉,你的浏览器不支持 FileReader");
                //         input1.setAttribute('disabled', 'disabled');
                //     } else {
                //         // console.log(typeof FileReader);
                //         input1.addEventListener('change', that.readFile(), false);
                //         /*input1.addEventListener('change',function (e){
                //       // console.log(e.target.files[0]);
                //       console.log(this.files[0]);
                //       },false); */
                //     }
                // };
            }
        },

到了这里,关于canvas 自定义画布,在画布上增加(边框 图片 文字 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序canvas画布转图片转pdf文件

    目录 关键步骤介绍 步骤一:将canvas页面保存为图片 步骤二:上传图片,获取唯一的fileID

    2024年01月16日
    浏览(33)
  • 微信小程序canvas画布绘制base64图片并保存图片到相册中

    WXML部分: 样式可以根据自己需求自行调整 canvas绘制成图片部分: 这就将图片绘制出来了。 首先获取用户相册权限。 保存功能:

    2024年02月13日
    浏览(28)
  • 微信小程序使用canvas画布生成二维码海报分享图片(完整示例代码)

    canvas.js //获取应用实例 const app = getApp() Page({ /** 页面的初始数据 */ data: { // canvas _width: 0, //手机屏宽 _heigth: 0,//手机屏高 swiperHeight: 300,//主图图片高度 canvasType: false,//canvas是否显示 loadImagePath: ‘’,//下载的图片 imageUrl: ‘https://cos.myfaka.com/car/service/1.jpg’, //主图网络路径 codeU

    2024年04月12日
    浏览(58)
  • C# 图片转PDF,PDF增加水印文字

    好久没写博客了,今天给大家分享一个图片转PDF的相关操作,也算是一次总结吧。 首先需要准备动态库itextsharp.dll,这个dll去网上下载,都可以下载到,C#对PDF的操作都是基于这个类库来实现的。话不多说,直接上代码。

    2024年02月09日
    浏览(42)
  • uniapp中使用canvas,在微信小程序中实现图片缩放移动涂鸦文字

    最近需要一个功能,在微信中编辑图片,实现对图片的涂鸦、加文字、缩放、移动,以下基本能实现该功能。 uniapp中使用画布,实现图片的编辑-批量批改图片 1.初始化画布图片,图片是网络图片,非本地图片,所以需要先获取图片信息,直接使用uni.getImageInfo(如果是本地图

    2024年04月14日
    浏览(42)
  • vue3中,使用html2canvas截图包含视频、图片、文字的区域

    需求:将页面中指定区域进行截图,区域中包含了图片、文字、视频。 第一步,先安装 第二步,在页面引入: 第三步,页面使用: 1)html部分: 2)js部分: 刚开始我截出的图只有文字,插图和视频部分是空白的,并没有将页面的插图和视频截进去,最终发现是 跨域 导致的

    2024年02月06日
    浏览(41)
  • React实现文本框输入文字内容动态给图片添加文字信息(多个)并生成新的图片

    收到这个需求的时候,我的内心是崩溃的,脑子里已经跑过一万匹草泥马,内心想这种事为啥不交给ps去做,哪怕是手机里图片编辑也可以做到吧,专业的事交给专业的工具去干不就好了,何必出这种XX需求。后来想想就释然了,反正拿钱干活,干啥不是干,只要给钱,再XX的

    2024年02月06日
    浏览(38)
  • 画布canvas

    canvas是HTML5重要元素,不需要外部插件支持,为我们提供了强大的图形处理功能,常用于移动端web的开发。canvas是一个标签在body中直接书写即可,且在css内部样式中不能修改画布的宽度,高度。 1.获取画布:var canvas=document.querySelector(\\\'canvas\\\') 2.获取画笔 :var ctx=canvas.getContext

    2023年04月11日
    浏览(37)
  • HTML5 Canvas(画布)

    canvas标签定义图形,比如图表和其他图像,你必须用脚本来绘制图形。 在画布上( Canvas )画一个共红色矩形,渐变矩形,彩色矩形,和一些彩色文字。 HTML5canvas元素用于图形绘制,通过脚本(通常是 Javascript)来完成。 canvas标签是图形容器,必须使用脚来绘制图形。 你可以

    2024年02月14日
    浏览(33)
  • 【小程序】Canvas 画布分享海报

    成品效果图 可以通过切换下面图片形成不同的海报背景分享图

    2024年02月14日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包