美文网首页
微信小程序分享封面图比例问题

微信小程序分享封面图比例问题

作者: 学无止境_cheer_up | 来源:发表于2023-12-10 18:46 被阅读0次

背景:

微信小程序现在页面分享微信官方api要求分享封面图的比例是宽高比5:4,但是由于安卓和ios的图片缩放策略不同,导致目前的问题ios图片显示正常,安卓机分享页面封面图显示不全,目前官方尚未解决此问题,只能我们自己先处理掉

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

<canvas 
  style="position: absolute; top: -1000px; left: -1000px; width: 875px; height: 700px;background: #fff;"
    canvas-id="canvas"></canvas>

2,详解思路

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
把当前画布指定区域的内容导出生成指定大小的图片,并返回文件路径。

总函数

/**
     * 分享封面图片比例
     * @param imgUrl
     */
    getShareImg(imgUrl) {
        return new Promise((resolve) => {
            Taro.getImageInfo({
                src: imgUrl, // 原图路径
                success: (res) => {
                    let ctx = Taro.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.draw(false, () => {
                        Taro.canvasToTempFilePath({
                            width: canvasW,
                            height: canvasH,
                            destWidth: 750, // 标准的iphone6尺寸的两倍,生成高清图
                            destHeight: 600,
                            canvasId: "canvas",
                            fileType: "jpg", // 注意jpg默认背景为透明
                            success: (res) => {
                                // 设置分享图片路径
                                resolve(res.tempFilePath);
                            },
                        });
                    });
                },
            });
        });
    }

分享函数

 /**
     * 分享好友、群组
     */
    @Hook
    async onShareAppMessage() {
        const img = await this.getShareImg(
            "https://xxxxxxxxxx.jpg",
        );

        return {
            title: '标题',
            path: `/pages/home/index`,
            imageUrl: img,
        };
    }

相关文章

  • 小程序分享等能力又升级了

    一、转发小程序时可以自定义配封面图 以往,小程序都是默认截取小程序界面顶部一部分,作为分享出来的分享封面图。 如果...

  • 微信小程序如何裁剪图片作为转发封面

    我们知道微信小程序的转发时的封面图片比例固定为5:4,具体内容详见小程序开发文档: 但是,在实际开发时我们有时需要...

  • 小程序轮播图

    | 微信小程序轮播图实现,实现在首页上轮播图,让效果更好看。查看微信小程序开发文档可知,微信小程序提供swiper...

  • 小程序开发注意事项

    小程序开发注意事项 小程序分享 微信小程序的分享只能分享到朋友 不能分享到朋友圈 微信小程序的分享可以指定分享页面...

  • 微信小程序笔记心得

    微信小程序问题汇总及详解《一》form表单 微信小程序问题汇总及详解《二》tab切换 微信小程序问题汇总及详解《三...

  • 微信小程序资料集(下)

    8月18日小程序Demo集合 微信小程序Demo:股票分时图、K线图 微信小程序精品Demo:知乎日报 微信小程序...

  • Android 分享微信小程序之图片优化

    小菜上周接入了微信分享小程序的入口,基本功能实现都没问题,有需要的朋友可以了解一下 Android 分享微信小程序...

  • 微信小程序分享onShareAppMessage报错

    问题 微信小程序分享报错Cannot read property 'apply' of null;at pages...

  • 微信小程序通过云函数进行微信支付

    微信小程序微信支付 官方流程图如下: 微信小程序微信支付官方流程图链接 我简化的流程: 本地发起下单请求调用云函数...

  • 微信小程序实战

    微信小程序实战 有问题可以扫码加我微信,有偿解决问题。承接小程序开发。微信小程序开发交流qq群 870222928...

网友评论

      本文标题:微信小程序分享封面图比例问题

      本文链接:https://www.haomeiwen.com/subject/dujpgdtx.html