使用原生cavans把图片和文字生成一张新的图片并解决失真问题

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>正式邀请函</title>
        <meta name=”description” content="">
        <meta name="viewport" content="width=device-width,initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" />
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="full-screen" content="true" />
        <meta name="screen-orientation" content="portrait" />
        <meta name="x5-fullscreen" content="true" />
        <meta name="360-fullscreen" content="true" />
        <link rel="stylesheet" href="./assets/css/poster1.css?date=10">
    </head>

    <body>

    <div class="operat">
        <input id="name" type="text" placeholder="名字" maxlength="10">
        <button class="submit-btn" onclick="drawImage()"></button>
    </div>
    <img id="imgbox1" src="./assets/images/poster/haibao1.jpg" alt="" style="width:37.5rem;height:81.2rem">
    <div class="pic">
        <canvas id="myCanvas" style="display: none;">
        </canvas>
    </div>

    <script src="./assets/js/jquery.min.js"></script>
    <script src="./assets/js/layout.js"></script>
    <script src="./assets/js/index.js"></script>
    <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
   
    <!--cavans图片和文字截取生成一个img-->
    <script>
       // 绘制图片
      function drawImage() {
        var name = document.getElementById("name").value;
        if(name){
          // 当前html的font-size方便使用rem
          var size = getComputedStyle(window.document.documentElement)['font-size'].split('p')[0]
          var numSize = parseInt(size)

          // //获取屏幕宽度用于canvas宽度自适应移动端屏幕
          var  clientWidth = getWidth();
          var canvas = document.getElementById("myCanvas");
          //由于手机屏幕时retina屏,都会多倍渲染,在此只设置2倍,如果直接设置等于手机屏幕,会导致生成的图片分辨率不够而模糊
          canvas.width = 2*clientWidth; 
          canvas.height = 2*numSize*81.2;

          var context = canvas.getContext("2d");
          var imgbox1 = document.getElementById("imgbox1");
          var src = "./assets/images/poster/haibao1.jpg";
          var img = new Image();//创建图片对象,用于在canvas中渲染
          img.src=src;
          var w = 2*clientWidth;

          //当图片加载成功以后再进行下一步动作,如果不加这句,会生成黑图
          img.onload = function(){
            // 绘制的 img 在 canvas 中的坐标 drawImage(img图片, x开始坐标, y开始坐标, 图片宽度, h图片高度)
            context.drawImage(img, 0, 0, w, 2*numSize*81.2);
            // 设置生成的文字的样式
            var font = "600 " + 2*numSize*1.5 + "px " + '微软雅黑';
            context.font = font;
            context.textAlign = "center";
            context.fillStyle = "#000";
            context.fillText(name,2*numSize*10.5, 2*numSize*22);
            var downloadImg = canvas.toDataURL("image/jpeg");
            imgbox1.src = downloadImg;
            alert('海报已生成,长按转发或者保存')
          }
        }else{
          alert("请输入您的名字!");
        }
      }

      // 获取屏幕宽度
      function getWidth(){
        if(window.innerWidth){
          return window.innerWidth;
        }
        else{
          if(document.compatMode == "CSS1Compat"){
            return document.documentElement.clientWidth;
          }
          else{
            return document.body.clientWidth;
          }
        }
      }
    </script>
    </body>
</html>
*,body{
    margin: 0;
    padding: 0;
}
.operat input{
    position: absolute;
    top: 20rem;
    left: 7.6rem;
    width: 5rem;
    height: 3rem;
    line-height: 3rem;
    text-align: center;
    background: #f0f4fa;
    border: solid 1px #f0f4fa;
    font-size: 1.5rem;
    font-weight: bold;
}
.submit-btn{
    position: fixed;
    width: 10.95rem;
    height: 2.4rem;
    bottom: 10rem;
    right: 2rem;
    background: url("../images/poster/btn.png") no-repeat;
    background-size: 100% 100%;
    border: 0px solid transparent;
    z-index: 100;
}

图片分别是背景图和按钮图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值