前言: 我在我的博客小程序使用微信小程序分享功能 图片不符合5:4问题 ,对其原理
扫描下面二维码,可以体验哦

准备

在需要自定义分享的页面 设置canvas 组件

目录

  • 准备
  • 详解思路
  • 定义总函数
  • 全局通用分享
<canvas style="position: absolute; top: -1000px; left: -1000px; width: 875px; height: 700px;background: #fff;"canvas-id="canvas"></canvas>

详解思路

uni.getImageInfo // 获取图片信息
获取网络图片信息需先配置download域名白名单才能生效。
https://mp.weixin.qq.com/ 登录小程序 开发管理 - 开发设置 - 服务器域名 配置download域名白名单

uni.getImageInfo({src: '图片',success: (image)=> {//返回图片信息 宽高console.log(image.width); console.log(image.height);}
});

获取到图片信息后

uni.createCanvasContext("canvas") //创建 canvas 绘图上下文
定义canvas 信息

  let ctx = uni.createCanvasContext("canvas")let canvasW = 0let canvasH = res.height// 把比例设置为 宽比高 5:4canvasW = (res.height * 5) / 4// 为画框设置背景色,注意要放在画图前,图会覆盖在背景色上ctx.fillStyle = "#fff"//填充矩形 设置矩形的宽高ctx.fillRect(0, 0, canvasW, canvasH) //左上角的x坐标,左上角的y坐标,宽度,高度//绘制图像到画布上ctx.drawImage(res.path, (res.width - canvasW) / 2, 0, canvasW, canvasH,0, 0, canvasW, canvasH) // 图片资源,图像左上角在canvas画布上X轴的位置,Y轴的位置,绘制图像的宽度,高度,源图像的矩形选择框的左上角 X 坐标, Y 坐标,源图像的矩形选择框的宽度,高度
ctx.draw(false, () => {//canvas在绘图上下文中的描述(路径、变形、样式)实例 画到 canvas 中。})

uni.canvasToTempFilePath
把当前画布指定区域的内容导出生成指定大小的图片,并返回文件路径。
数据传参详解

定义总函数

getShareImg: (imgUrl) => {return new Promise((resolve) => {uni.getImageInfo({src: imgUrl, // 原图路径success: (res) => {let ctx = uni.createCanvasContext("canvas")let canvasW = 0let canvasH = res.height// 把比例设置为 宽比高 5:4canvasW = (res.height * 5) / 4// 为画框设置背景色,注意要放在画图前,图会覆盖在背景色上ctx.fillStyle = "#fff"ctx.fillRect(0, 0, canvasW, canvasH)ctx.drawImage(res.path, (res.width - canvasW) / 2, 0, canvasW, canvasH,0, 0, canvasW, canvasH)// ctx.drawImage(//   res.path,//   0,//   0,//   canvasW,//   canvasH,//   (canvasW - res.width) / 2, // 宽度从中间向两边填充//   0,//   canvasW,//   canvasH// )ctx.draw(false, () => {uni.canvasToTempFilePath({width: canvasW,height: canvasH,destWidth: 750, // 标准的iphone6尺寸的两倍,生成高清图destHeight: 600,canvasId: "canvas",fileType: "jpg", // 注意jpg默认背景为透明success: (res) => {// 设置分享图片路径resolve(res.tempFilePath)},})})}})})}

全局通用分享

新建一个share.js

export default {name: "share",onLoad: function() {wx.showShareMenu({withShareTicket: true,menus: ["shareAppMessage", "shareTimeline"]})},//发送给朋友onShareAppMessage(res) {let path = `/` + this.$scope.route;return {title: '极客博文 | dlyjc',path,imageUrl: 'https://www.dlyjc.link/uploads/20230324/1679624199235.jpeg '};},// 分享到朋友圈onShareTimeline() {return {};},
}

在main.js 引入

import share from '@/utils/share.js'
Vue.mixin(share)

详解 - 解决微信小程序分享功能图片 5:4 问题 详解 - 解决微信小程序分享功能图片 5:4 问题 详解 - 解决微信小程序分享功能图片 5:4 问题 详解 - 解决微信小程序分享功能图片 5:4 问题 详解 - 解决微信小程序分享功能图片 5:4 问题 详解 - 解决微信小程序分享功能图片 5:4 问题 详解 - 解决微信小程序分享功能图片 5:4 问题 详解 - 解决微信小程序分享功能图片 5:4 问题 详解 - 解决微信小程序分享功能图片 5:4 问题 详解 - 解决微信小程序分享功能图片 5:4 问题 详解 - 解决微信小程序分享功能图片 5:4 问题

详解 - 解决微信小程序分享功能图片比例问题 - 全局分享相关推荐

  1. 微信小程序详解 php,微信小程序canvas基础详解

    canvas 元素用于在网页上绘制图形.HTML5 的 canvas 元素使用 JavaScript 在网页上绘制2D图像.本文主要和大家分享微信小程序canvas基础详解,希望能帮助到大家. 一.了 ...

  2. 微信小程序详解 php,微信小程序列表开发详解

    本文主要和大家分享微信小程序列表开发详解,主要以代码的形式和大家分享,希望能帮助到大家. 一.知识点 (一).列表渲染 wx:for tip:wx:for="array"可以等于参 ...

  3. 详解制作微信小程序流程,微信小程序好开发吗?

    一.从注册开始 要开发小程序自然要申请注册一个小程序,我们先进入微信公众平台注册账号(若有账号则直接登录). 因为微信公众号同时管理着订阅号,公众号以及小程序等多种账号,所以这里要选择小程序账号类型: ...

  4. java小程序详解_微信小程序登录Java后台接口(详解,附示例代码)

    首先看一下官方文档 地址:微信小程序官方文档API登录接口 我们先对官方给的时序图进行简单的分析 1.当小程序调用wx.login()时,会获得一个code(临时登录凭证),然后我们需要用wx.req ...

  5. android可拖拽九宫格,微信小程序实现九宫格图片拖拽

    (在真机上的效果就不演示了,是差不多的) 实现思路 布局 在这里运用到了微信小程序的moveable-area和moveable-view两个标签. moveable-area是可拖拽的区域,需要设置 ...

  6. 微信小程序php后台支付,微信小程序 支付功能实现PHP实例详解

    微信小程序 支付功能实现PHP实例详解 前端代码: wx.request({ url: 'https://www.yourhost.com/weixin/WeiActivity/payJoinfee' ...

  7. 《微信小程序开发》 页面导航最强详解 | 如何对小程序页面进行跳转?

    <微信小程序开发> 页面导航最强详解 | 如何对小程序页面进行跳转? 文章目录 <微信小程序开发> 页面导航最强详解 | 如何对小程序页面进行跳转? 一.微信小程序导航 二.命 ...

  8. 微信 php收藏功能实现,关于微信小程序收藏功能的实现

    这篇文章主要介绍了微信小程序收藏功能的实现代码,基本功能是点击收藏后显示已收藏,在另一个页面出现目前点击收藏的项目.需要的朋友可以参考下 需求 点击收藏后显示已收藏,在另一个页面出现目前点击收藏的项目 ...

  9. 微信小程序支付功能用服务器吗,微信小程序 支付功能 服务器端(TP5.1)实现...

    首先下载微信支付SDK ,将整个目录的文件放在 /application/extend/WxPay 目录下 在使用SDK之前我们需要对 WxPay.Config.php 进行配置 namespace ...

最新文章

  1. python录入数据至ppt_用 Python 让你的 PPT 数据动起来
  2. mysql 安装更改目录权限设置密码_mysql-8.0 安装教程(自定义配置文件,密码方式已修改)...
  3. MATLAB在人工智能中的应用案例:以MATLAB的方式玩转自动驾驶(附部分代码)
  4. 《Cisco QoS认证考试指南(第2版)》——1.1节“我已经知道了吗?”测试
  5. hibernate的Configuration类和SessionFactory接口
  6. Computer Browser服务不能启动
  7. 《编写高质量代码改善JavaScript程序的188个建议》读书笔记
  8. python六十四课——高阶函数练习题(一)
  9. [原]Jenkins(十二)---jenkins管理员用户无法登陆解决办法Access Denied
  10. Fuel 9.0安装Openstack由于NTP检查没通过导致失败--解决办法
  11. Qt ui-setupUi(this)的作用
  12. jqprint 分页打印_JS实现页面打印(整体、局部)
  13. 【洛谷P2872】道路建设(最小生成树prim/kruskal)
  14. abaqus 输出TSAIW和一些Load Surface Traction的细节
  15. 苹果电脑怎样下载爱奇艺
  16. DXP导入网络报表的方法
  17. 关于本学期学计算机基础专业的收获,大学生计算机基础学期总结-20210420001228.docx-原创力文档...
  18. 解决Vue history模式下路由跳转时页面404问题
  19. v-charts使用-实例
  20. 去中心化应用程序 (dApps) 发展现状及趋势回顾

热门文章

  1. 组件式GIS开发总结(一)
  2. 冰桶挑战,逻辑思维玩出了互联网的味道
  3. 基于MFCC对GTZAN音乐流派分类
  4. 双肩背包,椅子,电梯,保温杯
  5. 英语eschaunge交易所
  6. Python 画樱花表白
  7. 13.5.3 用指针处理结构数组
  8. UG/NX二次开发(C#) 创建体的最小包容块
  9. 广东实验室LIMS系统供应商相关分析
  10. 联想电脑屏幕亮度无法调节