canvas合成海報(bào)

html部分,背景圖原始為552px *654px
這里有個(gè)坑,之前我沒有把寬高寫在行內(nèi),寫在內(nèi)聯(lián)樣式里,導(dǎo)致背景圖根本就不準(zhǔn),所以一定把寬高寫在行內(nèi)樣式里!??!

<main id="mask">
    <canvas id="myCanvas" width="276" height="327"></canvas>
</main>

JS部分


    function draw(applyNo) {
        var bg = {
            src: "https://static.19louimg.cn/ui/theme20/0211shengdu/jiaxing_poster.png"
        }
        var image = new Image();
        image.crossOrigin = "Anonymous";
        var c = document.getElementById("myCanvas");
        var ctx = c.getContext("2d");
        //*******解決移動(dòng)端繪制出來(lái)海報(bào)模糊的問題START
        let dpr = window.devicePixelRatio; // 假設(shè)dpr為2
        // 根據(jù)dpr,擴(kuò)大canvas畫布的像素,使1個(gè)canvas像素和1個(gè)物理像素相等
        c.style.width = c.width + 'px';
        c.style.height = c.height + 'px';
        c.width = dpr * 276;
        c.height = dpr * 327;
        // 由于畫布擴(kuò)大,canvas的坐標(biāo)系也跟著擴(kuò)大,如果按照原先的坐標(biāo)系繪圖內(nèi)容會(huì)縮小
        // 所以需要將繪制比例放大
        ctx.scale(dpr, dpr);
        //********解決移動(dòng)端繪制出來(lái)海報(bào)模糊的問題END
        image.onload = function () {
            ctx.drawImage(image, 0, 0, 276, 327);
            ctx.font = "18px PingFangSC-Regular";
            ctx.fillStyle = '#24A193';
            ctx.fillText('親愛的' + username+'小朋友', 37, 90);
            //二維碼當(dāng)前頁(yè)地址 帶參數(shù)
            var code = `https://jiaxing.19lou.com/vote/web/newDetail/${surveyNo}/${applyNo}?fromContent=${searchInfo}`
            var m5 = $.md5(code);
            var p1 = m5.substr(0, 2)
            var p2 = m5.substr(2, 2)
            var qrUrl = 'http://att3.citysbs.com/qrcode/' + p1 + '/' + p2 + '/' + m5 + '.png?data=' + encodeURIComponent(code)
            var codeImg = new Image();
            codeImg.crossOrigin = 'anonymous';
            codeImg.onload = function () {
                ctx.save();//創(chuàng)建保存點(diǎn)
                ctx.drawImage(codeImg, 150, 185, 70, 70);
                ctx.restore();
                var src = c.toDataURL("image/png");//把路徑轉(zhuǎn)為base64
                const img1 = document.createElement('img');
                img1.src = src
                $("#mask").append(img1)
                img1.id = 'img1'
                img1.style.cssText = "width:276px;height:327px;position:absolute;left:50%;margin-left:-138px;opacity:1;z-index:99;top:2rem";
            }
            codeImg.src = qrUrl;
        }
        image.src = bg.src;
    }


這里有個(gè)坑,之前我把畫布生成的圖片,也就是img1的opacity值為0的時(shí)候,華為mate20、p20保存圖片竟然識(shí)別不到二維碼,改為1就好了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,439評(píng)論 0 11
  • 概述 在網(wǎng)易云課堂學(xué)習(xí)李南江老師的《從零玩轉(zhuǎn)HTML5前端+跨平臺(tái)開發(fā)》時(shí),所整理的筆記。筆記內(nèi)容為根據(jù)個(gè)人需求所...
    墨荀閱讀 2,475評(píng)論 0 7
  • day01-_起源和結(jié)構(gòu) 結(jié)構(gòu):Xhtml xml 表現(xiàn):CSS 行為:DOM ECMAScript 以上都屬于W...
    Sakura_明妃閱讀 1,330評(píng)論 0 1
  • 瀏覽器與服務(wù)器的基本概念 瀏覽器(安裝在電腦里面的一個(gè)軟件) 作用: ①將網(wǎng)頁(yè)內(nèi)容渲染呈現(xiàn)給用戶查看。 ②讓用戶通...
    云還灬閱讀 1,284評(píng)論 0 0
  • 1.MySQL需要重新部署,刪除哪兩個(gè)文件和執(zhí)行什么命令 刪除arch和data目錄 2.MySQL的創(chuàng)建一個(gè)DB...
    MySQL技術(shù)閱讀 178評(píng)論 0 0

友情鏈接更多精彩內(nèi)容