zoukankan      html  css  js  c++  java
  • canvas实现图片js在图片上添加文字和二维码

    1.效果展示:

    2.代码实现:

    // 合成分享图片
        function drawImage(qcodeUrl,inviter_name){
            var canvas = document.getElementById('myCanvas');
            var context = canvas.getContext('2d');
               // canvas.width  = document.body.clientWidth;//canvas的宽度
               canvas.width =750;//图片的宽度
               canvas.height = canvas.width*667/375;
            var swidth = canvas.width*667/375;//保存的图片宽度
            var sheight = canvas.height*667/375;
            $("#myCanvas").css({
                "height":sheight,
                "width":swidth
            });
              context.rect(0 , 0 , swidth , sheight);
              context.fill();
              var myImage = new Image();
              myImage.src = "/nwx/m/wx/images/fortuneOneAndN/invite.jpg";  //背景图片 
            //   myImage.src = "/m/wx/images/fortuneOneAndN/invite.jpg"; 
              myImage.crossOrigin = 'Anonymous';
              myImage.onload = function(){
              context.drawImage(myImage , 0, 0 , canvas.width , canvas.height,0,0,canvas.width , canvas.height);
            //    添加文字
                 context.font = 'bolder 36px Microsoft YaHei';
                context.textAlign = 'right';
                context.textBaseline = 'bottom';
                var left = canvas.width*0.78;
                var top = canvas.height*0.066;
                context.fillStyle = '#fff';
                context.fillText(inviter_name, left, top);
            var myImage2 = new Image();
                myImage2.src = "data:image/jpeg;base64,"+qcodeUrl;//二维码图片
                // myImage2.crossOrigin = 'Anonymous';
                myImage2.onload = function(){
                    layerUtils.iLoading(false);
                    var imgWidth=canvas.width/2-150;//二维码的位置
                    var imgHeight=canvas.width*0.76;
                    context.drawImage(myImage2 , imgWidth , imgHeight , 300 , 270);
                    var imgUrl = canvas.toDataURL("image/png");
                    $("#img").attr("src",imgUrl);
                }
              }
        };
    <div class="page" id="fortuneOneAndN_eQcodeInvite">
        <div id="activite_invite" >
            <!-- <h3>专属邀约活动海报生成</h3> -->
            <div class="containt_mask"></div>
            <div class="submit_containt">
                <div class="submit_info" style="text-align: left;">
                    <input id="invite_name" class="inpt_conmon" type="text" placeholder="请输入姓名" onfocus="this.placeholder=''" onblur="this.placeholder='请输入姓名'" />
                    <input id="phone_no" class="phone_no inpt_conmon" type="tel" pattern="d*" maxlength="11" placeholder="输入手机号" onfocus="this.placeholder=''" onblur="this.placeholder='输入手机号'" />
                    <div class="phone_code">
                        <input id="code" class="submit_code inpt_conmon" type="tel" pattern="d*" maxlength="6" placeholder="手机验证码" onfocus="this.placeholder=''" onblur="this.placeholder='手机验证码'" />
                        <input id="getCode"class="submit_getCode inpt_conmon" type="button" value="获取验证码" />
                    </div>
                </div>
                <div class="sub_btn"> 
                    <a class="submit_btn">我要发起活动</a>
                </div>
            </div>
            <canvas id="myCanvas" style="z-index: 1;visibility: hidden;"></canvas>
            <div class="invite_mask" style="display: none;">
                 <div class="down_mask"></div>
                 <img src="../../images/wealthySpring/cancel.png" class="invite_cancel"/>
                 <img id="img" style="position: fixed; top: 3%;left: 10%;  80%;"/>
                <div class="invite_tip">长按保存图片</div>
            </div>
        </div>
     
    
     
      
    </div>
    #activite_invite{
        position:fixed;
        top: 0;
        left: 0;
        height: 100%;
        width: 100%;
        background: url(../images/fortuneOneAndN/bg.jpg) no-repeat center center;
        background-size: 100% 100%;
    }
    #activite_invite .submit_containt{
        width: 80%;
        position: absolute;
        top:30%;
        left: 10%;
        color: #fff;
        text-align: center;
        border-radius: 0.16rem;
        -webkit-border-radius: 0.16rem;
        -ms-border-radius: 0.16rem;
        -o-border-radius: 0.16rem;
        -moz-border-radius: 0.16rem;
    }
    #activite_invite .containt_mask{
        position: absolute;
        width: 80%;
        top: 30%;
        left: 10%;
        background: #000000;
        opacity: 0.3;
        -webkit-border-radius: 0.1rem;
        -ms-border-radius: 0.1rem;
        -o-border-radius: 0.1rem;
        -moz-border-radius: 0.1rem;
    }
    #activite_invite .phone_no {
        width: 90%;
        margin-bottom: 0.1rem;
    }
    #activite_invite .inpt_conmon {
        background: #fff;
        border-radius: 0.2rem;
        padding: 0.08rem;
        border: none;
        outline: none;
    }
    #activite_invite .submit_code {
        width: 48%;
    }
    #activite_invite .submit_getCode {
        margin-left: 0.1rem;
        background: rgb(209,181,142);
        color: #fff;
        padding: 0.06rem 0.1rem;
    }
    #activite_invite .submit_btn {
        display: block;
        width: 80%;
        margin: 0.16rem 10% 0.12rem 10%;
        padding: o.1rem 0.2rem;
        background: rgb(209,181,142);
        font-size: 0.18rem;
        border-radius: 20px;
        font-weight: bold;
    }
    #activite_invite  .invite_mask {
        position: fixed;
        top: 0;
        left: 0;
        height: 100%;
        width: 100%;
        display: flex;
        align-items: center;
        justify-items: center;
    }
    #activite_invite .down_mask {
        position: absolute;
        height: 100%;
        width: 100%;
        background: #000;
        opacity: .5;
    }
    #activite_invite .invite_tip {
        text-align: center;
        z-index: 1;
        color: #fff;
        font-size: 0.18rem;
        position: fixed;
        bottom: 2.8%;
        left: 35%;
    }

    添加多条文字

    // 合成分享图片
        function drawImage(qcodeUrl,inviter_name){
            var tipContent = "在5月31日前通过活动页面登陆,填写收件信息并参与活动,符合活动条件的客户,有机会获得一次性普通口罩1份(10枚).";
            var canvas = document.getElementById('myCanvas');
            var context = canvas.getContext('2d');
               canvas.width =750;//图片的宽度
               canvas.height = canvas.width*667/375;
            var swidth = canvas.width*667/375;//保存的图片宽度
            var sheight = canvas.height*667/375;
            $("#myCanvas").css({
                "height":sheight,
                "width":swidth
            });
              context.rect(0 , 0 , swidth , sheight);
              context.fill();
              var myImage = new Image();
              myImage.src = "/nwx/m/wx/images/healthyMind/invite.jpg";  //背景图片 
            //   myImage.src = "/m/wx/images/healthyMind/invite.jpg"; 
              myImage.crossOrigin = 'Anonymous';
              myImage.onload = function(){
              context.drawImage(myImage , 0, 0 , canvas.width , canvas.height,0,0,canvas.width , canvas.height);
            //    添加文字
                 context.font = 'bolder 24px Microsoft YaHei';
                context.textAlign = 'left';
                context.textBaseline = 'bottom';
                var left = 230;
                var top = canvas.height*0.8;
                context.fillStyle = '#640000';
                // 文本换行
                var w = canvas.width-260;
                changestyle(context,tipContent,left,top,w)
                // tip2
                context.font = 'bolder 16px Microsoft YaHei';
                context.textAlign = 'left';
                context.textBaseline = 'bottom';
                var left = 230;
                var top = canvas.height*0.8+150;
                 context.fillStyle = '#BE8C4B';
                context.fillText("*温馨提示:扫码参与,物流费用由**承担", left, top);
                // 邀请人姓名
                context.font = 'bolder 36px Microsoft YaHei';
                context.textAlign = 'right';
                context.textBaseline = 'bottom';
                var left = canvas.width*0.82;
                var top = canvas.height*0.066;
                context.fillStyle = '#640000';
                context.fillText(inviter_name, left, top);
            var myImage2 = new Image();
                myImage2.src = "data:image/jpeg;base64,"+qcodeUrl;//二维码图片
                // myImage2.crossOrigin = 'Anonymous';
                myImage2.onload = function(){
                    layerUtils.iLoading(false);
                    var imgWidth=50;//二维码的位置
                    var imgHeight=canvas.height*0.8;
                    context.drawImage(myImage2 , imgWidth , imgHeight , 150 , 150);
                    var imgUrl = canvas.toDataURL("image/png");
                    $("#img").attr("src",imgUrl);
                }
              }
        };
    // 文本换行
        function changestyle(context,t,x,y,w){
            var chr = t.split("");
            var temp = "";              
            var row = [];
            for(var a = 0; a < chr.length; a++){
                if( context.measureText(temp).width < w && context.measureText(temp+(chr[a])).width <= w){
                    temp += chr[a];
                }
                else{
                    row.push(temp);
                    temp = chr[a];
                }
            }
            row.push(temp);
            for(var b = 0; b < row.length; b++){
                context.fillText(row[b],x,y+(b+1)*36);//间隔36,类似行高
            }
        }
  • 相关阅读:
    Android游戏开发22:Android动画的实现J2me游戏类库用于Android开发
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
    使用OGR创建dxf格式矢量数据
    mysql 数据库引擎 MyISAM InnoDB 大比拼 区别
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
    mysql 更改数据库引擎
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
    android 数字键盘使用
    MySQL Innodb数据库性能实践
    eclipse : Error while performing database login with the driver null
  • 原文地址:https://www.cnblogs.com/changyuqing/p/12835164.html
Copyright © 2011-2022 走看看