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

前言: 我在我的博客小程序使用微信小程序分享功能 图片不符合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 = 0
  let canvasH = res.height
  // 把比例设置为 宽比高 5:4
  canvasW = (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 = 0
							let canvasH = res.height
							// 把比例设置为 宽比高 5:4
							canvasW = (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 问题
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序tdesign-零售电商模板是一款专为零售电商行业设计的开源模板,它提供了丰富的功能和界面设计,以帮助开发者快速构建零售电商类的小程序应用。 该模板的主要特点包括以下几个方面: 1. 完善的商品展示和管理:模板提供了完善的商品展示和管理功能,包括商品分类、商品详情、商品列表、购物车等。开发者可以根据自己的需求,灵活使用这些功能来展示和管理自己的商品。 2. 灵活的购物流程:模板提供了灵活的购物流程设计,包括商品加购、修改数量、选择规格、下单支付等功能。用户可以方便地浏览和购买商品,提升购物体验。 3. 多种营销工具:模板内置了多种营销工具,如优惠券、满减活动、积分、折扣等。开发者可以根据自己的需求,选择合适的营销工具来促进销售和提升用户转化率。 4. 友好的用户界面设计:模板采用了现代化的界面设计风格,用户界面美观、简洁,并且易于操作。这有助于提升用户体验,提高用户对小程序的持续使用。 5. 功能扩展与定制化:开发者可以根据自己的需求进行功能扩展和定制化操作。模板提供了丰富的组件和接口,开发者可以根据自己的实际需要进行灵活的定制和开发。 总的来说,微信小程序tdesign-零售电商模板是一个功能丰富、界面美观的开源模板,通过使用这个模板,开发者可以快速搭建自己的零售电商类小程序应用,并提供良好的用户体验和功能支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值