用html创建canvas画布生成图片

本篇文章主要介绍如何用html创建canvas画布生成图片,感兴趣的朋友参考下,希望对大家有所帮助。

1,在html里新建canvas画布
/**要生成图片的html*/

思路惊奇 思路惊奇

@@##@@ @@##@@

/*生成的canvas和最终生成的图片*/

@@##@@

//设置canva画布大小,这里会把画布大小设置为2倍,为了解决生成图片不清晰的问题,需要注意接下来所有的函数都是在html2canvas这个对象里定义的var html2canvas={    canvas:document.getElementById("canvas"),    ctx:canvas.getContext("2d"),    saveImage:function(){          this.canvas.width=windowPro.innerWidth*2;          this.canvas.height=windowPro.innerHeight*2-4.8*bastFontSize;          this.ctx.fillStyle="#0c3e78";          this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height);    }}
2,将要生成的图片的dom元素载入canvas中,

一般我们想生成图片的时候,dom元素基本上由图片和文字组成,想一些效果之类的是不适合生成图片的。
a, 获取要加载到canvas的图片

 domArray:[$(".con_1_1"),$(".con_1_2")],//要加载的图片元素列表 imgArrayLoad:function(){        var that=this,domArray=this.domArray;        for(var i=0,len=domArray.length;i<len;i++){            (function(){            //循环出所有图片元素,一个个图片添加                that.addImgToCanvas(domArray[i],that.imgAllLoad);            }())        }    },

b,获取每个图片元素的在页面上大小,距离顶部地步距离,然后绘制到canvas相应的位置
这里图片大小和距离也是取得2倍,原因是解决生成的图片不清晰。

  addImgToCanvas:function(obj,fn){      var width=obj.width()*2,//图片在网页宽度          height=obj.height()*2,//图片在网页高度          x=obj[0].x*2,//图片距离网页最顶部距离          y=obj[0].y*2,//图片距离网页最右边距离          img=new Image(),          that=this,          src=obj.attr("src");          img.src=src;          img.onload=function(){           //把图片绘制到canvas上              that.ctx.drawImage(obj[0],x,y,width,height);上              that.loadImgNum++;              if(fn && typeof fn === "function")fn(that.loadImgNum);               /**位置1**/          }  },
3,将要生成的文字的dom元素载入canvas中,

同把图片插入到canvas类似,首先需要获取文字元素,确定文字在网页中上下左右的位置,之后插入到相应的canvas里。

a, 获取要加载文字元素,

 textObj:[$(".title_des2"),$(".title_des3")], textArratLoad:function(){        var that=this;        for(var m=0,len=that.textObj.length;m<len;m++){            (function(){                that.writeTextOnCanvas(domArray[m],parseInt(28)+"px 微软雅黑","#d0b150")            })()        }    },

b,获取每个文字元素距离网页距离,同样的,距离距离长度必须喂2倍,把文字添加到canvas上

立即学习“前端免费学习笔记(深入)”;

 writeTextOnCanvas:function(obj,fontsize,color){//添加文字到canvas        var width=obj.width()*2,          height=obj.height()*2,          x=obj.offset().left*2,          y=obj.offset().top*2;          var that=this;          var text=obj.html().replace(/^\s+|\s+$/, "");//去掉文字里的空格          that.ctx.fillStyle =color; //设置文字颜色          that.ctx.font = fontsize;//设置文字大小          that.ctx.textAlign="left";//设置文字对其方向          textBaseline = "middle";          //因为canvas里的文字不会换行,所以我们需要想办法让长段文字换行        for(var i = 1; that.getTrueLength(text) > 0; i++){            var tl = that.cutString(text, 30);            that.ctx.fillText(text.substr(0, tl), x,  y+36*i);// 把文字添加到canvas上            text = text.substr(tl);        }    },

c,文字绘制到canvas时,自动换行。。因为canvas绘制文字的时候只能设置最大宽度和距离顶部左边距离。所以我们需要自行处理下。

解决思路:规定我们每行要显示的字数多少,然后根据字符串的长度截取对应的长度。由于涉及到中午因为占用的字符数不一致所以建议都转为字节长度,方法如下。

 getTrueLength:function(str){//获取字符串的真实长度(字节长度)            var len = str.length, truelen = 0;            for(var x = 0; x  128){                    truelen += 2;                }else{                    truelen += 1;                }            }            return truelen;        },    cutString:function(str, leng){//按字节长度截取字符串,返回substr截取位置            var len = str.length, tlen = len, nlen = 0;            for(var x = 0; x  128){                    if(nlen + 2 < leng){                        nlen += 2;                    }else{                        tlen = x;                        break;                    }                }else{                    if(nlen + 1 < leng){                        nlen += 1;                    }else{                        tlen = x;                        break;                    }                }            }            return tlen;        }
4,最后把canvas转为图片,需要注意的是必须等所有图片都载入完成才能进行图片的生成,要不然会造成生成的图片不全。文字载入可以不考虑。
   imgAllLoad:function(nexi){      var length=this.domArray.length;     if(nexi>=length){         var dataURL = canvas.toDataURL();         $(".shareImg img").attr("src",dataURL);//canvas转为图片     } }
总结:

1,获取图片和文字位置,通过canvas的ctx.drawImage(IMG,left,top,width,height)绘制图片,通过.ctx.fillText(text, left,top)绘制文字,通过canvas.toDataURL();生成图片。
2,需要注意为了生成图片不失真,canvas大小是2倍,图片文字都是2倍。
3,为了文字换行, getTrueLength
4,必须等到图片都绘制完成,再生成图片,这个很重要。

相关推荐:

HTML图片的img标签怎样使用

HTML图片与超链接学习笔记

html图片img加超链接后产生难看的蓝色边框的解决方法

用html创建canvas画布生成图片用html创建canvas画布生成图片用html创建canvas画布生成图片

以上就是用html创建canvas画布生成图片的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1546181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
GORM关联查询如何排除敏感字段?
上一篇 2026年5月10日 10:34:34
node.js版本过高
下一篇 2026年5月10日 10:34:38

相关推荐

  • JavaScript实现表单提交前的确认与取消机制

    本文详细介绍了如何使用JavaScript为网页表单添加提交前的确认对话框。通过监听表单的submit事件,并在用户点击确认框中的“取消”按钮时,利用event.preventDefault()方法有效阻止表单的默认提交行为,从而提升用户操作的安全性与体验。 理解表单提交事件与确认机制 在网页开发中…

    2026年5月10日
    000
  • HTML结构优化:高效移除标签内的标签

    本教程详细介绍了如何通过编程方式移除HTML文档中嵌套在“标签内的“标签,从而优化HTML结构。文章提供了纯JavaScript(适用于浏览器环境)和Node.js(结合`jsdom`库)两种实现方案,并附带示例代码和关键注意事项,帮助开发者实现更简洁、语义化的网页内容。 HTML结构…

    2026年5月10日
    000
  • HTML怎么添加固定背景?

    HTML怎么添加固定背景?HTML怎么添加固定背景?HTML怎么添加固定背景?HTML怎么添加固定背景?

    要实现html固定背景,需使用css的background-attachment: fixed属性。具体步骤为:1. 准备合适的背景图片,注意大小与质量;2. 编写html结构并引入css文件;3. 在css中设置background-image指定图片路径,配合background-attachm…

    2026年5月10日 用户投稿
    000
  • HTML动态内容加载漏洞怎么测试_AJAX动态加载内容潜在漏洞测试流程

    识别AJAX加载内容中的XSS漏洞,需结合工具与人工分析,首先通过开发者工具观察XHR请求与响应,重点检查服务端返回的HTML、JSON数据是否包含用户可控内容且未充分编码;若响应被innerHTML、eval等高危函数处理,则存在DOM型XSS风险;测试时应在输入点注入典型payload(如),触…

    2026年5月10日
    000
  • 怎么在微信上运行html代码_微信运行html代码方法【指南】

    答案是通过将HTML部署为公网链接或使用在线工具生成可访问网址,再在微信中打开链接来间接实现HTML页面展示。具体可通过GitHub Pages等平台托管网页、利用小程序web-view组件加载、或用JSBin等在线编辑器生成预览链接发送至微信查看,注意兼容性与安全限制。 微信本身不支持直接运行HT…

    2026年5月10日
    400
  • Laravel与jQuery动态表单提交:解决输入值丢失的常见陷阱

    本教程旨在解决Laravel应用中,通过jQuery动态添加的表单输入字段无法被正确提交的问题。核心原因是HTML 调试利器 dd(): 在Laravel开发中,dd($request->all()) 是一个极其有用的调试工具,它可以让你清晰地看到后端实际接收到的所有请求数据,从而快速定位问题…

    2026年5月10日
    000
  • html滚动条滚动位置怎么记忆_html滚动条滚动状态保存方法

    答案:使用localStorage或sessionStorage保存滚动位置可提升用户体验。具体步骤包括监听scroll事件获取scrollTop,通过beforeunload保存位置,load时恢复;SPA中可用路由钩子如Vue的activated/deactivated按路径存储;建议防抖优化、…

    2026年5月10日
    000
  • JavaScript中的服务端渲染(SSR)有哪些实现方案?

    Next.js、Nuxt.js和SvelteKit是主流SSR框架,基于Node.js在服务端渲染HTML以提升首屏速度与SEO;可通过Express等手动集成react-dom/server或@vue/server-renderer实现更灵活控制;React 18支持流式渲染与渐进hydratio…

    2026年5月10日
    000
  • PHP如何实现一个基本的MVC框架_PHP MVC框架搭建步骤详解

    答案是通过构建前端控制器、路由器、控制器、模型和视图的分工协作实现PHP的MVC框架。首先,所有请求由public/index.php接收,加载自动加载器并启动应用;接着,根据路由规则将请求分发到对应控制器;控制器调用模型处理业务逻辑与数据,再将结果传递给视图渲染输出,最终返回响应。该结构通过解耦各…

    2026年5月10日
    000
  • audio标签支持哪些音频格式

    答案:为确保网页音频兼容性,应提供MP3、Ogg Vorbis和AAC等多种格式,利用标签让浏览器自动选择,同时考虑文件大小、音质、专利许可及编码效率,以提升加载速度与用户体验。 Web 标签在不同浏览器中支持的音频格式有所差异,但最核心且广泛支持的包括 MP3、WAV 和 Ogg Vorbis。此…

    2026年5月10日
    300
  • HTML5在线如何添加滚动动画 HTML5在线交互效果的创作秘诀

    使用CSS3和JavaScript实现滚动动画,通过transform、transition与Intersection Observer API结合,可创建流畅的视差动效。先设置元素初始透明与偏移,添加过渡属性,滚动至视口时触发类名变更,配合Animate.css等库提升效率。关键在于控制节奏、优化…

    2026年5月10日
    000
  • 创建和打开 HTML 空文档

    创建 html 文档:使用文本编辑器输入 html 结构,并保存为 .html 文件。打开 html 文档:双击文件或在浏览器中使用“文件” > “打开”选项。实战案例:创建新 html 文件,添加标题、样式表和内容,并保存为 .html 文件。 创建和打开 HTML 空文档 HTML 文件结…

    2026年5月10日
    000
  • XML注释的语法格式是什么?

    XML注释以结束,用于添加不影响解析的说明性内容,提升文档可读性与维护性。1. 注释不可含连续两个连字符(–),否则会导致XML解析错误,而HTML对此较宽容。2. 应侧重解释“为什么”而非“是什么”,避免冗余。3. 可用于模块分隔、临时禁用配置、标记待办事项等高级用途,增强大型文档结构…

    2026年5月10日
    000
  • HTML注释可以隐藏代码吗_HTML注释临时隐藏代码功能详解

    HTML注释可临时隐藏代码以便调试,语法为,浏览器不渲染但开发者工具可见;常用于保留暂不用的结构,如包裹等元素;注意无法阻止外部资源预加载,且注释内容在源码中可见,不适合隐藏敏感信息;多行可用单个注释块包裹更简洁;合理使用提升开发效率,但非删除或加密手段。 HTML注释的主要作用是让浏览器忽略其中的…

    2026年5月10日
    000
  • JavaScript/jQuery 实现点击元素外部隐藏菜单的通用教程

    本教程详细讲解如何使用 javascript 和 jquery 实现点击网页上任意位置(指定元素外部)时隐藏或关闭菜单、弹窗等 ui 组件。我们将分析常见的实现误区,并提供一种健壮的解决方案,结合事件委托、dom 遍历和状态管理,确保多实例场景下的正确行为,并附带完整代码示例和注意事项,帮助开发者构…

    2026年5月10日
    000
  • DOM遍历与文本节点换行符添加:HTML元素内容换行处理教程

    本教程详细探讨了如何在html元素的文本内容中添加换行符,特别是在处理混合内容(即同时包含文本和子元素)的场景。文章分析了直接修改 `innerhtml` 或 `textcontent` 的局限性,并提出了一种通过递归遍历dom树并直接操作文本节点(`textnode`)的专业解决方案,确保换行符能…

    2026年5月10日
    000
  • html如何增加空行_HTML空行(br/段落)添加与间距控制方法

    使用标签可实现换行,连续使用产生空行效果;2. 用标签通过默认margin形成自然空行,语义清晰;3. 推荐用CSS的margin、line-height和padding精确控制间距;4. 避免滥用空段落或,应保持HTML结构语义化,优先通过CSS控制样式。 在HTML中添加空行或控制文本间距,常用…

    2026年5月10日
    000
  • 深入解析:CSS外部样式与内联样式的性能差异及最佳实践

    在处理大量本地html元素时,内联样式可能因其直接性而表现出更快的初始加载速度,尤其是在极端数量的元素下。然而,这并非普适规律。对于大多数web应用而言,外部css因其优越的可维护性、可重用性及浏览器缓存机制,是更推荐且通常更高效的样式管理方式。理解其背后的渲染机制和加载特性,有助于做出明智的性能优…

    2026年5月10日
    000
  • HTML代码怎么实现表单验证_HTML代码前端表单验证方法与正则表达式应用

    答案是结合HTML5内置验证与JavaScript自定义验证,并辅以正则表达式实现高效表单校验。首先利用required、type、minlength等属性进行基础约束,再通过JavaScript监听submit、blur等事件,编写逻辑处理复杂规则,如密码一致性、实时输入反馈等;同时使用正则表达式…

    2026年5月10日
    000
  • html语言如何学起_HTML语言(标签/属性)零基础入门学习方法

    学HTML无需编程基础,它是网页的骨架语言,通过标签组织内容。1. 掌握基本结构:从DOCTYPE声明到html、head、body等核心标签;2. 熟悉常用标签与属性:如h1-h6标题、p段落、a链接、img图片及ul/ol列表,属性写在开始标签内;3. 动手实践:用记事本编写含标题、段落、列表和…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信