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,类似行高
            }
        }
  • 相关阅读:
    JAVAGUI设计步骤
    JAVA接口基础知识总结
    静态关键字static用法。
    JAVA面向对象的多态性
    java封装的概念
    多线程
    关于集合类间的区别
    JAVA——异常
    java——内部类
    Java——接口
  • 原文地址:https://www.cnblogs.com/changyuqing/p/12835164.html
Copyright © 2011-2022 走看看