请给我一面红旗@微信官方 9( canvas实现)

许多年前,小学生们转发QQ信息“今天是马化腾生日,只要复制转发此信息,就可以获得一个月qq会员“。现在,大家转发朋友圈“请给我一面国旗@微信官方” 重点是,上面的还是这群人!

emmmm,你还在艾特微信官方吗??

国庆节还没有到,腾讯迎国庆换新颜活动却已经结束啦,好多小伙伴还没来得及换,应广大朋友的要求,我们就用canvas简单来实现一下吧~    欢迎体验:给你的微信头像加个小红旗吧
http://study.whosmeya.com/demo/canvas-image-concat.html

代码如下:

<body>
  <h3>请选择图片</h3>
  <input id="ipt" type="file" accept="image/*" mutiple="mutiple" />
  <h3>剪裁后图片</h3>
  <img id="imgCut" style="border: 1px solid rgba(0, 0, 0, 0.15);" />
  <h3>合成后图片(长按图片保存)</h3>
  <img id="imgConcat" style="border: 1px solid rgba(0, 0, 0, 0.15);" />
</body>
<script>
  window.onload = function () {
    const [w, h, s] = [150, 150, 3];  // 生成图片宽,  生成图片高,  生成图片放大倍数
    var ipt = document.getElementById('ipt');
    // 剪裁后原图
    var imgCut = document.getElementById('imgCut');
    imgCut.style.width = `${w}px`;
    imgCut.style.height = `${h}px`;
    // 剪裁后合成图
    var imgConcat = document.getElementById('imgConcat');
    imgConcat.style.width = `${w}px`;
    imgConcat.style.height = `${h}px`;
    // 合成画布
    var canvas = document.createElement('canvas');
    canvas.width = w * s;
    canvas.height = h * s;
    var ctx = canvas.getContext('2d');
    var reader = new FileReader();
    var img = new Image();  // 用户上传图
    var imgTop = new Image();  // 头像框图
    imgTop.src = '../images/national-flag.png';
    imgTop.setAttribute("crossOrigin", 'anonymous');
    img.addEventListener('load', function () {
      var iw = img.width;   // 用户上传图片宽
      var ih = img.height;  // 用户上传图片高
      var r = w / h;        // 目标图片宽高比
      // 计算裁剪
      var sx, sy, sWidth, sHeight;
      if (iw / ih > r) {
        sHeight = ih;
        sWidth = sHeight * r;
      } else {
        sWidth = iw;
        sHeight = sWidth / r;
      }
      sx = (iw - sWidth) / 2;
      sy = (ih - sHeight) / 2;
      ctx.fillStyle = '#ffffff';  // canvas 背景颜色
      ctx.drawImage(img, sx, sy, sWidth, sHeight, 0, 0, w * s, h * s);  // canvas添加用户图
      imgCut.src = canvas.toDataURL("image/png");
      ctx.drawImage(imgTop, 0, 0, w * s, h * s);  // canvas添加头像框图
      imgConcat.src = canvas.toDataURL("image/png");
    })
    reader.addEventListener('load', function (e) {
      img.src = e.target.result;
    })
    ipt.addEventListener('change', function (e) {
      reader.readAsDataURL(e.target.files[0]);
    })
  }
</script>

 大家赶紧实现起来吧,附国旗框框一张~

 

 

posted @ 2019-09-26 15:26  _skylar  阅读(654)  评论(0编辑  收藏  举报