美文网首页前端开发
canvas生成图片

canvas生成图片

作者: 紫气楠楠 | 来源:发表于2019-10-18 15:40 被阅读0次

canvas生成图片

结构
注意不要用v-if控制显示隐藏,canvas在dom被删除后在显示时画布上的内容会消失

<div class="mask_operation" v-show="cvsshow">
            <div class="cvs-box">
                <canvas id="mycvs" v-show='false' ref="cvs" width="600" height="738"></canvas>
                <img :src="cvsimg" alt="">
            </div>
            <div class="savebtn" @click="saveImg">长按保存到手机相册</div>
            
        </div>

js
注意:canvas 调用cvs.toDataURL("image/png");生成图片常见的坑
绘制的图片在画布上不显示:
原因:绘制路径时图片还未加载完,要在 img.onload 函数内绘制路径

画布绘制完成显示正常,生成图片时失败,或生成的图片只有文字
原因:canvas生成图片时会有各种图片跨越的报错
解决方法:
1.给img标签加上crossOrigin属性,默认值为anonymous,元素的跨域资源请求不需要凭证标志设置

              let img = new Image()
              img.src = imgsrc
              img.crossOrigin = ""

2.将图片转为base64格式,(这个可以请后台人员给个转换的接口)

 this.$http.get('https://ssl2.xxxxx.net/qr_code/index/getImgBase?url='+imgsrc).then((res)=>{
    
 })
// 生成活动图片
           createdImg(){
               let imgsrc = this.goodsList[this.user_index].img_url
               
               this.maskShow = false
               this.cvsshow = true
               let cvs = this.$refs.cvs
               let ctx=cvs.getContext("2d"); //获取画布2d对象
               var ratio =  this.getPixelRatio(ctx);
               // cvs.width = canvas.width * 2
               // cvs.height = canvas.height * 2;
               ctx.fillStyle="#fff"
               ctx.fillRect(0,0,300*2,369*2)
               ctx.save()
               ctx.beginPath();

               ctx.font = "30px Arial"
               ctx.fillStyle="#EB4E3F";
               ctx.textBaseline='middle'
               ctx.fillText("邀您一起淘好物",75*2,51*2);

               ctx.font = "24px Arial"
               ctx.fillStyle = "#EB4E3F"
               ctx.textBaseline = "bottom"
               ctx.fillText('¥',15*2,325*2)

               ctx.font = "48px Arial"
               ctx.fillStyle = "#EB4E3F"
               ctx.textBaseline = "bottom"
               ctx.fillText('208',27*2,328*2)

               ctx.font = "24px Arial"
               ctx.fillStyle = "#999999"
               ctx.textBaseline = "bottom"  
               let pp = 360
               ctx.fillText('¥360',72*2,325*2)

               ctx.fillText('卡云亲子乐园',15*2,355*2)
               ctx.save()
               ctx.beginPath();
               
               ctx.lineWidth = 0.3;
               ctx.moveTo(72*2,318*2)
               ctx.lineTo(112*2,318*2)
               ctx.stroke()

               ctx.fillStyle="#999";
               ctx.font = "24px Arial"
               ctx.textBaseline='middle'
               ctx.fillText("-长按识别小程序码-",186*2,356*2);
               
               //这里是后台提供的一个借口,将网络图片转为base64
               this.$http.get('https://ssl2.xxxxx.net/qr_code/index/getImgBase?url='+imgsrc).then((res)=>{
                   imgsrc = res.data.data
                   let img = new Image()
                   img.src = imgsrc
                   img.crossOrigin = ""
                   
                   //确保图片已完成加载在绘制路径
                   img.onload = ()=>{
                       ctx.arc(35*2,40*2,25*2,0,2*Math.PI);
                       ctx.strokeStyle="#BFBFBF";
                       // ctx.stroke();
                       ctx.clip();
                       ctx.drawImage(img,10*2,15*2,50*2,50*2)
                       ctx.restore()

                       let img2 = new Image()
                       img2.src = imgsrc
                       img2.crossOrigin = ""
                       img2.onload = ()=>{
                           ctx.drawImage(img2,0,75*2,300*2,168*2)
                           let img3 = new Image()
                           img3.src = imgsrc
                           img3.crossOrigin = ""
                           img3.onload = ()=>{
                               ctx.drawImage(img3,192*2,246*2,93*2,93*2)
                               this.cvsimg = cvs.toDataURL("image/png");
                           }
                       }
                       
                   }
               })

               
               

           }

相关文章

  • base64格式的图片转换为file 文件格式

    在项目中用到使用canvas生成图片功能(canvas.toDataURL("image/png")),生成的图片...

  • 微信小程序设置图片清晰度

    微信小程序生成图片之后,生成图片不清楚。需要设置canvas里生成图片的参数。destWidth 生成图片的宽度,...

  • HTML编码生成图片

    借助html2canvas 与 canvas2image库把HTML标签生成图片 思路: 1.生成图片的样式先使用...

  • canvas生成图片

    canvas生成图片 结构注意不要用v-if控制显示隐藏,canvas在dom被删除后在显示时画布上的内容会消失 ...

  • 使用Canvas动态生成分享图出现的问题总结

    Canvas画布上绘制图片出现问题 使用Canvas动态生成图片,未能成功展示在页面上 报错信息 调用canvas...

  • 移动端添加图片裁剪的坑

    本文关键:阻止冒泡、canvas压缩、canvas裁剪、生成黑色图片。 最近项目需要在添加图片时实现裁剪功能,虽然...

  • html2canvas

    html2canvas将HTML内容写入Canvas生成图片 http://caibaojian.com/html...

  • 前端水印生成方案

    先看下效果: 思路1: 使用canvas进行生成图片,然后动态生成div填充整个背景,将生成的图片用与 backg...

  • 前端截图 前端生成海报 下载

    截取内容为div 通过html2canvas截取 生成Bob | base64 保存图片到本地(无法下载的生成图片...

  • HTML生成图片

    本章介绍一下如何把HTML转成图片,主要思路是用html2canvas这个插件生成把页面生成canvas,然后用c...

网友评论

    本文标题:canvas生成图片

    本文链接:https://www.haomeiwen.com/subject/svoimctx.html