uni-app小程序好友分享封面图裁剪5:4比列

uni-app小程序封面图裁剪5/4比列

后台给到的图片过大或者过小分享出去的图片样式不是漂移就是缺失

 <canvas canvas-id="canvas" style="position: absolute; top: -1000px; left: -1000px;width: 225px; height: 180px;"></canvas>
	makeCanvas: function(imgUrl, title) {
				uni.getImageInfo({
					src: imgUrl,
					success: (imgInfo) => {
						let ctx = uni.createCanvasContext('canvas')
						let canvasW = 0
						let canvasH = imgInfo.height
						// 把比例设置为 宽比高 5:4
						canvasW = (imgInfo.height * 5) / 4
						// 为画框设置背景色,注意要放在画图前,图会覆盖在背景色上
						ctx.fillStyle = "#fff";
						if (imgInfo.width > 225 || imgInfo.height > 180) {
							canvasW = 225;
							canvasH = 180;
							ctx.fillRect(0, 0, canvasW, canvasH);
							let dWidth = canvasW / imgInfo.width; // canvas与图片的宽度比例
							let dHeight = canvasH / imgInfo.height; // canvas与图片的高度比例
							let dWH = imgInfo.width / imgInfo.height; //宽高比
							if (imgInfo.width > canvasW && imgInfo.height > canvasH) {
								// console.log(dWH);
								if (dWH > 1 && dWH < 1.5) {
									ctx.drawImage(imgInfo.path, (canvasW - imgInfo.width * dHeight) / 2,
										0, imgInfo.width * dHeight, imgInfo
										.height *
										dHeight)
								} else {
									if (imgInfo.width > imgInfo.height) {
										ctx.drawImage(imgInfo.path, 0, (canvasH - imgInfo.height *
												dWidth) / 2, imgInfo.width * dWidth,
											imgInfo.height *
											dWidth)
									}
									if (imgInfo.width == imgInfo.height) {
										ctx.drawImage(imgInfo.path, (canvasW - imgInfo.width *
												dHeight) / 2, 0, imgInfo.width * dHeight,
											imgInfo
											.height * dHeight)
									}
									if (imgInfo.width < imgInfo.height) {
										ctx.drawImage(imgInfo.path, (canvasW - imgInfo.width *
												dHeight) / 2, 0, imgInfo.width * dHeight,
											imgInfo
											.height * dHeight)
									}
								}
							} else {
								if (imgInfo.width > imgInfo.height) {
									ctx.drawImage(imgInfo.path, 0, (canvasH - imgInfo.height) / 2,
										imgInfo.width * dWidth, imgInfo.height)
								}
								if (imgInfo.width == imgInfo.height) {
									ctx.drawImage(imgInfo.path, (canvasW - imgInfo.width * dHeight) / 2,
										0, imgInfo.width * dHeight, imgInfo
										.height *
										dHeight)
								}
								if (imgInfo.width < imgInfo.height) {
									ctx.drawImage(imgInfo.path, (canvasW - imgInfo.width * dHeight) / 2,
										0, imgInfo.width * dHeight, imgInfo
										.height *
										dHeight)
								}
							}
						} else {
							ctx.fillRect(0, 0, canvasW, canvasH)
							ctx.drawImage(
								imgInfo.path,
								0,
								0,
								canvasW,
								canvasH,
								(canvasW - imgInfo.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) => {
									this.shareImg = res.tempFilePath
									this.shareInfo = {
										title: title,
										imageUrl: this.shareImg,
										path: '/pages_vote/showRoomAskVotersDetail?from=share' +
											'&pageUrl='+encodeURIComponent(this
											.pageUrl)+'&userOptionId=' + this
											.userOptionId + '&userQuestionId=' +
											this
											.userQuestionId + '&isCollention=' +
											this.isCollention
									};
								},
								fail: (err) => {
									console.log("执行了", err)
								}
							})
						})
					}
				})
			},
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值