html2canvas转换图片模糊问题,怎么解决?

发布于 2022-09-11 20:33:49 字数 2869 浏览 18 评论 0

找了好多方法都是放大来解决,但是我这边放大时截取的图有问题,请问大家怎么看?
具体主要转换代码如下:
html结构如下:

  <!--二维码页面-->
        <div class="codePage hideObj">
            <div class="popup"></div>
            <div class="poster" id="box" style="z-index: 999;"></div>
            <div class="poster" id="canvasimg" style="opacity: 0;">
                <div class="shareProductImg">
                    <img src="./images/activity618/shareMain.png" id="shareProductImg" />
                </div>
                <div class="qrBox">
                    <img :src=" BASE_URL + '/weixin/imageCtrl/getminiqrQr?scene=' + targetId + ',' + darenId + '&page=pages/index/index&width=300&pfChannelId=' + CHANNEL_ID" alt="">
                </div>
            </div>
        </div>
      

css代码:

 .popup,
    .popupRules {
        width: 100%;
        height: 100%;
        position: fixed;
        top: 0;
        background: rgba(0, 0, 0, 0.5);
        display: flex;
        justify-content: center;
        align-items: center;
        z-index: 9;
    }
    
    .poster {
        width: 70%;
        top: 50%;
        position: fixed;
        z-index: 9;
        left: 50%;
        margin-left: -35%;
        transform: translateY(-45%);
    }
    
    .shareProductImg img {
        width: 100%;
        border-radius: 0.1rem;
    }
 function createImg() {

        //创建一个新的canvas
        var canvas2 = document.createElement("canvas");
        //获取宽高
        var w = $('#canvasimg').width();
        var h = $('#canvasimg').height();
        // // 将canvas画布放大若干倍,然后盛放在较小的容器内,就显得不模糊了
        canvas2.width = w * 2;
        canvas2.height = h * 2;
        canvas2.style.width = w + "px";
        canvas2.style.height = h + "px";

        // //可以按照自己的需求,对context的参数修改,translate指的是偏移量
        var context = canvas2.getContext("2d");
        // context.translate(-75,-130);
        // context.scale(1.85, 1.78);
        context.scale(2, 2);


        html2canvas(document.querySelector('#canvasimg'), {
            useCORS: true,
            scale: 2,
            width: w,
            height: h,
            canvas: canvas2,
            dpi: window.devicePixelRatio * 2, // window.devicePixelRatio是设备像素比
        }).then(function(canvas) {

            var dataUrl = canvas.toDataURL();
            var newImg = document.createElement("img");
            newImg.src = dataUrl;

            newImg.width = w;
            newImg.height = h;

            $("#box").show();
            $("#box").html(newImg);
            //生成以后,隐藏内容容器
            document.querySelector('#canvasimg').style.display = 'none';
        });

    }

效果如下:

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

习ぎ惯性依靠 2022-09-18 20:33:49

已解决,获取$('#canvasimg')的left和top的距离

    var rect = $('#canvasimg').get(0).getBoundingClientRect();

然后利用平移translate

    context.translate('-' + rect.left, '-' + rect.top);

这样就可以了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文