当前位置: 首页 > wzjs >正文

长春百度网站快速优化怎么用vps建网站

长春百度网站快速优化,怎么用vps建网站,简单的网站建设步骤,济南网站建设泰观网络文章目录 🎉验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示一、Canvas 绘制:接口回调“字符串”通过绘制的方式显示到前端✨1、前端代码(Canvas 绘制):包含验证码区域、绘制验证码方法&#x…

文章目录

  • 🎉验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示
    • 一、Canvas 绘制:接口回调“字符串”通过绘制的方式显示到前端✨
      • 1、前端代码(Canvas 绘制):包含验证码区域、绘制验证码方法🎊
      • 2、效果🎊
    • 二、Base64 图片渲染:接口回调直接显示服务器返回的 “Base64 图片”显示到前端✨
      • 1、前端代码(Canvas 绘制):包含验证码区域、绘制验证码方法🎊
      • 2、效果🎊
    • 三、总结🪄
      • 1、修改方案对比
      • 2、注意事项
        • 1. Base64 格式处理
        • 2. 图片适配样式
        • 3. 缓存问题
        • 4. 安全性增强
      • 3、 后端接口建议
      • 4、 性能优化

🎉验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示

一、Canvas 绘制:接口回调“字符串”通过绘制的方式显示到前端✨

1、前端代码(Canvas 绘制):包含验证码区域、绘制验证码方法🎊

<view @tap="refreshCaptcha" class="captcha-container"><canvas type="2d" id="captchaCanvas"></canvas>
</view>
/**获取账号密码登录的图片验证码*/refreshCaptcha() {const that = this;uni.request({url: that.$helper.HHH,method: 'POST',data: {},success: res => {if (res.data.result) {that.originalValidCode = res.data.data2; // 保存验证码文本that.drawCaptcha(res.data.data); // 绘制验证码} else {uni.showToast({title: '获取验证码失败',icon: 'none'});}},fail: () => {uni.showToast({title: '获取验证码失败',icon: 'none'});}});},/**绘制验证码,直接使用即可*/async drawCaptcha(text) {try {// 获取 canvas 实例const query = uni.createSelectorQuery().in(this);const canvas = await new Promise(resolve => {query.select('#captchaCanvas').fields({node: true,size: true}).exec((res) => {resolve(res[0].node);});});const ctx = canvas.getContext('2d');// 设置 canvas 大小const dpr = uni.getSystemInfoSync().pixelRatio;canvas.width = 100 * dpr;canvas.height = 32 * dpr;ctx.scale(dpr, dpr);// 清空画布ctx.clearRect(0, 0, 100, 32);// 设置背景色ctx.fillStyle = '#f0f0f0';ctx.fillRect(0, 0, 100, 32);// 绘制文字ctx.fillStyle = '#333333';ctx.font = 'bold 20px Arial';ctx.textBaseline = 'middle';// 计算文字总宽度以居中显示const textWidth = ctx.measureText(text).width;const startX = (100 - textWidth) / 2;// 随机倾斜每个字符for (let i = 0; i < text.length; i++) {const x = startX + i * (textWidth / text.length);const y = 16; // 垂直居中ctx.save();// 随机旋转角度const angle = (Math.random() - 0.5) * 0.3;ctx.translate(x, y);ctx.rotate(angle);ctx.fillText(text[i], 0, 0);ctx.restore();}// 添加干扰线for (let i = 0; i < 3; i++) {ctx.beginPath();ctx.strokeStyle = `rgb(${Math.random()*150},${Math.random()*150},${Math.random()*150})`;ctx.moveTo(Math.random() * 100, Math.random() * 32);ctx.lineTo(Math.random() * 100, Math.random() * 32);ctx.stroke();}// 添加干扰点for (let i = 0; i < 30; i++) {ctx.fillStyle = `rgb(${Math.random()*150},${Math.random()*150},${Math.random()*150})`;ctx.beginPath();ctx.arc(Math.random() * 100, Math.random() * 32, 1, 0, 2 * Math.PI);ctx.fill();}} catch (e) {console.error('绘制验证码失败:', e);}},

2、效果🎊

示例图片

二、Base64 图片渲染:接口回调直接显示服务器返回的 “Base64 图片”显示到前端✨

1、前端代码(Canvas 绘制):包含验证码区域、绘制验证码方法🎊

  • 确保后端返回的 Base64 数据 不带前缀(如 data:image/png;base64,),前端需要手动拼接:
    this.captchaImage = `data:image/png;base64,${res.data.base64}`;
    
<view @tap="refreshCaptcha" class="captcha-container"><canvas type="2d" id="captchaCanvas"></canvas>
</view>
// 1. 定义数据
data() {return {captchaImage: '' // 存储 Base64 图片数据}
},// 2. 获取验证码(从后端接口)
methods: {async refreshCaptcha() {try {const res = await api.getCaptcha(); // 替换为你的接口this.captchaImage = `data:image/png;base64,${res.data.base64}`;} catch (error) {console.error('获取验证码失败:', error);}}
},// 3. 初始化时加载
onLoad() {this.refreshCaptcha();
}

2、效果🎊

示例图片

三、总结🪄

通过用 Base64 图片渲染验证码,你实现了以下优化:

  1. 降低前端复杂度:无需维护 Canvas 绘制逻辑。
  2. 提升安全性:验证码由后端生成,避免前端模拟。
  3. 更好兼容性:Base64 图片在所有平台表现一致。

1、修改方案对比

特性Canvas 绘制Base64 图片渲染
实现方式动态生成图形/文字直接显示服务器返回的 Base64 图片
性能依赖前端计算直接渲染,性能更优
维护性需维护绘制逻辑仅替换图片源即可
安全性前端生成,可能被破解后端生成,更安全

2、注意事项

1. Base64 格式处理
  • 确保后端返回的 Base64 数据 不带前缀(如 data:image/png;base64,),前端需要手动拼接:
    this.captchaImage = `data:image/png;base64,${res.data.base64}`;
    
2. 图片适配样式
  • 添加 CSS 确保图片显示正常:
    .captcha-container image {width: 100%;  /* 宽度自适应容器 */height: auto; /* 高度按比例缩放 */
    }
    
3. 缓存问题
  • 如果验证码图片不变,浏览器可能缓存旧图。解决方法:
    • 在 URL 后加随机参数(如 ?t=${Date.now()}
    • 或要求后端在 HTTP 头中设置 Cache-Control: no-cache
4. 安全性增强
  • 建议后端对验证码 Base64 数据加密,前端解密后使用(防止中间人攻击)。

3、 后端接口建议

确保后端返回的数据结构包含原始 Base64 数据:

{"code": 200,"data": {"base64": "iVBORw0KGgoAAAANSUhEUgAAAMgAA..." // 纯 Base64 字符串}
}

4、 性能优化

  • 压缩图片:后端应返回压缩后的 Base64 数据(减少传输体积)。
  • 懒加载:验证码图片仅在需要时请求(如点击刷新时)。


文章转载自:

http://gQjoUJkj.wkhfg.cn
http://z07oviDb.wkhfg.cn
http://Ge31thST.wkhfg.cn
http://tdJzALh8.wkhfg.cn
http://VtPgMNjS.wkhfg.cn
http://43y1XBO4.wkhfg.cn
http://ktkZWg5g.wkhfg.cn
http://0lcMOXyU.wkhfg.cn
http://agW2g31X.wkhfg.cn
http://hjuFdAyN.wkhfg.cn
http://Pp6GNei7.wkhfg.cn
http://CNu9NfIa.wkhfg.cn
http://UARD4LID.wkhfg.cn
http://pR8t38tt.wkhfg.cn
http://n4lZ9hs1.wkhfg.cn
http://WTkr0rbW.wkhfg.cn
http://zZv1PXoH.wkhfg.cn
http://2hrOsRE5.wkhfg.cn
http://KRkv9wk8.wkhfg.cn
http://9tfPWS9h.wkhfg.cn
http://DnCrsxxF.wkhfg.cn
http://1JcSyxo1.wkhfg.cn
http://X3paNqPL.wkhfg.cn
http://7LJFuxaP.wkhfg.cn
http://AH1PqbAL.wkhfg.cn
http://nbLMamrk.wkhfg.cn
http://r6ml3JRf.wkhfg.cn
http://B1B5cg6X.wkhfg.cn
http://dEqiYhoe.wkhfg.cn
http://odAZi2zL.wkhfg.cn
http://www.dtcms.com/wzjs/623669.html

相关文章:

  • 在哪网站开发软件荣成市信用建设官方网站
  • 东莞网站网站建设定制软件开发文案
  • 境外网站服务器郑州建设局官方网站
  • 网易云网站开发温州网站建设设计公司
  • 网站名称是网址吗做物流网站电话号码
  • 赣州网站建设费用wordpress pdf下载链接
  • 电商网站seo公司商丘免费网站建设开发公司
  • 企业网站开发费用包括哪些郑州经济技术开发区属于什么区
  • 合肥市做网站多少钱html5网页制作源码大全
  • 搬家公司怎么做网站古尔邦节网站建设
  • 手机建网站优帮云icp经营性许可证申请条件
  • 开锁公司做网站智能建造师证书
  • 宁波网站建设培训怎么注册一个自己的品牌
  • 网站建设课程思政大连 网站开发
  • 安徽哪家公司做网站比较好湖南seo优化哪家好
  • 怎么用动图做网站背景微信公众号怎么搞
  • 网站需求报告怎么写黄页88网推广服务免费
  • 大型网站的制作渭南网站建设风尚网络
  • 手机免费网站建设哪家公司好电话销售怎么找客户渠道
  • 巢湖市重点工程建设管理局网站建设厅网站
  • 设计素材网站永久办公空间设计论文
  • 盐城网站优化推广服务seo需要掌握什么技能
  • 家居网站建设公司广州公司关键词网络推广
  • 中国建筑文兵简历aso优化违法吗
  • 建设俄语网站哪里做网站做的好
  • 文化公司网站建设湖南建设厅网站不良记录
  • 做国外有那些网站比较好即墨今天新闻大事
  • 网站免费域名申请wordpress傻瓜建站教程
  • 景安网站备案 不去拍照洛阳网站设计哪家专业
  • 杭州微信网站制作前端面试题2022