千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能

这篇具有很好参考价值的文章主要介绍了千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能,100个JavaScript的小应用🔥,公众号开发,微信,javascript,开发语言,原力计划

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。
🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。
🏆本文已收录于专栏:100个JavaScript的小应用,微信公众号开发。
🎉欢迎 👍点赞✍评论⭐收藏


🚀一、前言

中秋节是我国的重要传统节日,今年直接和国庆节凑到了一起,放一个8天的小长假,是不是很兴奋呢。为了增加节日气氛,许多人会更换自己的社交媒体头像,如微信头像。使用与中秋或者国庆主题相关的图片。本篇博文将介绍如何使用PHP通过微信公众号获取用户头像,并且将头像传递给JavaScript开发一个实现换中秋头像的功能。

千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能,100个JavaScript的小应用🔥,公众号开发,微信,javascript,开发语言,原力计划

通过本篇文章的阅读,您将获取如下的实战知识:

  1. 熟悉了解微信公众号的基本开发流程。
  2. 学习到微信公众号网页授权获取用户基本信息这个板块的开发。
  3. 基本掌握html,css等网页前端的组成与基本开发流程。
  4. Javascript, canvas用于图片合成,头像生成的场景使用。
  5. 学习到一部分PHP相关的后端知识

🚀二、开发流程概述

首先我们得通过微信公众号开发获取到用户的头像,然后我们需要准备一些素材。这个图片素材需要是镂空图 PNG,用来镶嵌在用的真实头像上面。接下来,我们需要创建一个HTML页面,并在其中引入一个JavaScript文件。我们将使用JavaScript来操作DOM元素和Canvas元素,实现换装功能。如果您熟悉HTMLJavaScript的基本知识那就更好了。

🚀三、配置微信公众号

🔎3.1 AppId和AppSecret获取

AppIdAppSecret得先获取到,请看下图,记得一定要保存好AppSecret
千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能,100个JavaScript的小应用🔥,公众号开发,微信,javascript,开发语言,原力计划

🔎3.1 添加网页授权域名

网页授权域名是必须要添加的,否则公众号是不回允许在没有通过的域名下面进行授权。如果你遇到了一些问题,可以排查一下是不是这个地方的配置。在公众号设置>功能设置里面添加,加域名就行。

千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能,100个JavaScript的小应用🔥,公众号开发,微信,javascript,开发语言,原力计划

这里可能要传文件验证,如果传了文件还是有问题,可以检查一下文件权限啥的,或者看看能不能手动访问。

🔎3.3 白名单设置

白名单主要是添加自己服务器所在的IP地址到公众号后台,这样只有指定的服务器才允许与公众号接口通信。如果白名单没有设置,获取access_token的时候可能会报如下错误。

{"errcode":40164,"errmsg":"invalid ip xxx ipv6 ::ffff:xxxx, not in whitelist rid: 6503251e-14033bf0-774d3d3e"}

千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能,100个JavaScript的小应用🔥,公众号开发,微信,javascript,开发语言,原力计划

在安全中心>IP白名单处进行设置,白名单设置了可能会有短暂的延时生效,如果当时不能访问,可以等会再试一下。

🚀四、功能开发

🔎4.1 获取用户微信头像

这个部分主要通过PHP进行开发,核心是如何与公众号进行API交互。

🍁4.1.1 引导用户进入授权页面

构建一个URL,用户点击后将跳转到微信授权页面,同时携带着您设置的回调URL。

$redirect_uri = urlencode('http://your-domain.com/callback.php'); // 回调URL,需要urlencode
$appid = 'Your Appid'; // 公众号AppID
$scope = 'snsapi_userinfo'; // snsapi_base或snsapi_userinfo
$state = 'STATE'; // 自定义参数,可不填
$auth_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$appid}&redirect_uri={$redirect_uri}&response_type=code&scope={$scope}&state={$state}#wechat_redirect";
header('Location: ' . $auth_url); // 跳转到授权页面

在到达callback.php之前,如果已经关注了公众号的用户,可以直接获取到用户头像,否则则会提示授权,用户同意之后才能获取头像,这便是网页授权获取用户头像的核心功能。授权的情况可以见下图真实案例。

千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能,100个JavaScript的小应用🔥,公众号开发,微信,javascript,开发语言,原力计划

🍁4.1.2 获取授权code并换取access_token

用户同意授权后,微信会重定向到您设置的回调URL,并携带一个code参数。在回调页面(callback.php)中获取到该code,并使用它来换取access_tokenopenid

$code = $_GET["code"]; // 授权code
$appid = 'Your Appid'; // 公众号AppID
$secret = 'Your App Secret'; // 公众号App Secret

// 通过code换取access_token
$token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$secret}&code={$code}&grant_type=authorization_code";
$token_data = json_decode(file_get_contents($token_url), true);

$access_token = $token_data['access_token']; // 获取到的access_token
$openid = $token_data['openid']; // 用户的openid

🍁4.1.3 获取用户基本信息

使用获取到的access_tokenopenid,可以调用以下API来获取用户基本信息:

$userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}&lang=zh_CN";
$userinfo_data = json_decode(file_get_contents($userinfo_url), true);

$nickname = $userinfo_data['nickname']; // 用户昵称
$headimgurl = $userinfo_data['headimgurl']; // 用户头像链接
// 可以根据需要获取其他用户信息字段
header('Location: https://www.xxx.wang/index.html?avatar_url=' . $headimgurl

上面代码的最后一句是重点,将获取到的微信头像传递给index.html,后面javascript会用到。

🔎4.2 JavaScript实现用户换头像

🍁4.2.1 创建HTML结构(index.php)

在HTML文件中,我们可以使用<input type="file">元素来让用户选择要上传的头像文件。同时,我们还需要一个<canvas></canvas>元素来绘制新的头像。

<!DOCTYPE html>
<html>
<head>
    <title>头像换装</title>
</head>
<body>
    <h1>头像换装</h1>
    <div id="avatar">
    	<img src="./img/head0.png" alt="0" id="avatar_template" style="z-index: 1000;pointer-events: none;">
        <img src="" alt="" id="avatar_img" class="pinch-zoom">
     </div>
     <p class="hide">
        <canvas style="width:500px;height:500px;" id="cvs"></canvas>
     </p>
     <div style="display: none;" class="avatar-final">
      <div class="finished-img">
        <img id="finishedImg" src=""/>
        <br>
      </div>
      <p class="control">
        <a class="css_btn_create" id="download">生成</a>
      </p>
    </div>
    <script src="main.js"></script>
    <script>loadImage()</script>
</body>
</html>

这里我用photoshop制作这么一个相框图片,里面加载头像,就是上面的head0.png

千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能,100个JavaScript的小应用🔥,公众号开发,微信,javascript,开发语言,原力计划

🍁4.2.2 拼接头像和相框

其中avatar_template就是我们的头像相框,avatar_img就是我们的微信头像,通过下面的方式来讲头像放到img标签里面。并且将拼接好的图片放到finishedImg里面。

// 将url的图片加载到页面
function loadImage() {
  let imgUrl = getQueryString('avatar_url');
  // 通过路径解析处高清图像
  imgUrl = headImgHD(imgUrl);
  $('#avatar_img').attr('src', imgUrl);
  $('#avatar_img').attr('crossOrigin', 'anonymous');
  curImage = $('#avatar_template').attr('src');
  drawToCanvas(imgUrl, curImage, $('#finishedImg'));
}

// 开始整合绘制图片到finishedImg里面
function drawToCanvas(img1, img2, showObj) {
  let cvs = document.getElementById('cvs');
  let showSize = 230;
  let size = 800;
  cvs.width = size;
  cvs.height = size;
  let ctx = cvs.getContext('2d');
  let image1 = new Image;
  image1.setAttribute('crossOrigin', 'anonymous');
  image1.src = img1;
  image1.onload = function () {
    let width = image1.width < image1.height ? size : size * (image1.width / image1.height);
    let height = image1.width > image1.height ? size : size * (image1.height / image1.width);
    let x = image1.width < image1.height ? 0 : (size * (image1.width / image1.height) - size) / 2;
    let y = image1.width > image1.height ? 0 : (size * (image1.height / image1.width) - size) / 2;

    document.getElementById('avatar_img').style.showSize = width + 'px';
    document.getElementById('avatar_img').style.showSize = height + 'px';
    document.getElementById('avatar_img').style.marginLeft = -x + 'px';
    document.getElementById('avatar_img').style.marginTop = -y + 'px';

    ctx.drawImage(image1, -x, -y, width, height);
    let image2 = new Image;
    image2.setAttribute('crossOrigin', 'anonymous');
    image2.src = img2;
    image2.onload = function () {
      ctx.drawImage(image2, 0, 0, size, size);
      let canvas = document.getElementById('cvs');
      //获取二维码中的图片地址
      let src_xp = canvas.toDataURL('image/jpeg');
      $(showObj).attr('src', src_xp)
    }
  }
}

🍁4.2.3 生成头像为一个图片

当用户完成头像换装后,我们可以提供一个按钮来让用户生成新的头像。这里,我们可以使用html2canvas方法将页面元素转化为一个整体的图片,并将其显示在页面中。这个时候我们可以长按图片保存,然后上传到我的头像就完成了换头像的功能。

$('#download').click(function (ev) {
  takeScreenShot();
});

function takeScreenShot() {
  html2canvas(document.getElementById('avatar'), {
    allowTaint:false,
    dpi: 400,
    useCORS: true,
    onrendered: function(canvas) {
      document.body.appendChild(canvas);
      var canvas = $('canvas')[1];
      //获取二维码中的图片地址
      let src_xp = canvas.toDataURL('image/jpeg');
      console.log(src_xp);
      $('#finishedImg').attr('src', src_xp)
      $('.avatar-final').show();
      $('#avatar-control').hide();
      $(canvas).hide();
    },
  });
}

最后,一起来看看最终的头像效果。

千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能,100个JavaScript的小应用🔥,公众号开发,微信,javascript,开发语言,原力计划

🚀五、总结

本篇博文介绍了如何使用JavaScript开发一个实现换中秋头像功能的应用程序。我们通过与微信公众号头像打通,并使用Html进行页面绘制。最后,通过Canvas进行图片整合,并提供一个生成按钮让用户一键生成新的头像。

千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能,100个JavaScript的小应用🔥,公众号开发,微信,javascript,开发语言,原力计划

如果你想直接体验换头像的功能,可以关注下面公众号回复【换头像】。今天的内容就到这里,我们下次见。文章来源地址https://www.toymoban.com/news/detail-719831.html

到了这里,关于千里共婵娟 | 结合微信公众号用JavaScript完整开发实现换中秋头像的功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • vue2公众号跳转小程序 wx-open-launch-weapp 超完整流程

    根据微信网页开发 / 开放标签说明文档 (qq.com)看开放标签 wx-open-launch-weapp 说明,从上往下完整的看到2.1 根据签名算法见JS-SDK说明文档的附录,所有开放标签列表见文末的附录1 概述 | 微信开放文档 获取wx.config 中相关签名等配置参数(后端通过接口传给我们) 开发者调试需

    2024年04月14日
    浏览(26)
  • Uniapp + SpringBoot 开发微信H5项目 微信公众号授权登录 JAVA后台(一、配置使用微信公众平台测试公众号)

    Uniapp + SpringBoot 开发微信H5项目 微信公众号授权登录 JAVA后台(一、配置使用微信公众平台测试公众号)

    一、接口配置信息填写校验 这里需要填写一个URL和一个Token验证字符串 我这里是用了natapp内网穿透 将本地的后台8080端口服务映射到了 http://x7zws8.natappfree.cc https://natapp.cn/在natapp官网注册账号并且申请免费隧道 申请完了之后把域名绑定到自己的后台 后台接口: SHA1: AesExcep

    2024年03月13日
    浏览(12)
  • 微信公众号开发以及测试公众号前端自测网页授权

    微信公众号开发以及测试公众号前端自测网页授权

    测试号申请(开发的时候需要使用微信测试号进行开发) 微信测试号申请地址 进入网页之后选择微信登陆,直接用微信扫码登录,微信测试号就申请成功了 测试号配置 申请成功之后会有一个测试号管理界面 1、会自动生成appID、appsecret(需要记录一下,后面会用到)。 2、接口

    2024年02月06日
    浏览(7)
  • 微信小程序引导关注公众号(超详细),获取公众号openID,是否关注公众号信息

    微信小程序引导关注公众号(超详细),获取公众号openID,是否关注公众号信息

    需求背景:微信小程序里,需要判断使用该小程序的用户是否有关注该小程序关联的公众号,如未关注要引导用户去关注公众号(用于公众号推送信息) 官网: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 接口(获取Code): 参数: APPID:公众号的唯

    2024年02月15日
    浏览(24)
  • xml建模----详细完整,易懂结合代码分析

    xml建模----详细完整,易懂结合代码分析

    目录 一.XML建模是什么 二.XML建模有什么作用??? 三.XML建模的案例                 以config.xml为例          将XML配置文件中的元素、属性、文本信息转换成对象的过程叫做XML建模 XML是被设计用来 存储数据、携带数据和交换数据 的。 XML不是为了显示数据而设计

    2024年02月13日
    浏览(11)
  • 微信小程序如何跳转到微信公众号文章,小程序如何关联公众号或订阅号

    微信小程序如何跳转到微信公众号文章,小程序如何关联公众号或订阅号

    公众号最高管理权限(或能与最高权限管理者配合操作) 小程序开发权限或最高管理权限 根据官方资料描述,小程序中展示微信公众号中的文章需要使用到 web-view web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面 src:webview 指向网页的链接 特别

    2024年02月14日
    浏览(60)
  • 【微信公众号】微信 jsapi 支付大概流程

    【微信公众号】微信 jsapi 支付大概流程

    jsapi 支付可运用于微信小程序和 h5 jsapi 支付不会弹出二维码(这点与 native 支付不同) jsapi 支付运用于移动端 native 支付运用于 PC 端 🔥 微信支付需要商家申请 商户号 ,商务号需要和小程序或公众号(服务号)进行绑定 💦 在微信商务平台可开通 native 支付、jsapi 支付或其

    2024年02月09日
    浏览(12)
  • weixin微信开放平台 微信公众平台

    weixin微信开放平台 微信公众平台

      微信小程序 https://mp.weixin.qq.com/ 微信开发者社区: https://developers.weixin.qq.com/community/search?query=63002page=1block=1random=1571284603034 申请流程指引: https://kf.qq.com/product/weixinmp.html#hid=99       微信公众号可以快速注册认证小程序了==https://www.cnblogs.com/ytkah/articles/6781163.html   https://dev

    2024年02月08日
    浏览(13)
  • 微信公众号 - Java推送小程序订阅消息给用户_java 通过微信公众号发送订阅通知

    微信公众号 - Java推送小程序订阅消息给用户_java 通过微信公众号发送订阅通知

    不啰嗦,我们直接开始! 本文使用体验版小程序进行调试。 1、登录微信公众平台 点开下面链接,使用微信扫码 微信公众平台 然后选择一个小程序并登录 2、在小程序后台找到Appid、AppSecret、Token、EncodingAESKey等参数 AppSecret忘记了可以自行重置 往下翻,在消息推送这儿能看到

    2024年04月26日
    浏览(13)
  • 微信公众号开发接入

    微信公众号开发接入

    你要有一个微信公众号,一个内网穿透工具 微信公众号:https://mp.weixin.qq.com/ 官网文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html 服务器配置:设置与开发--基本配置--服务器配置 token:3-32字符,自己生成配置到服务器配置 公网 IP:云服务器一般都有

    2024年02月06日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包