html2canvas生成圖片(移動(dòng)端),處理生成圖片模糊

????<section class="page page4-star" style="z-index: 2;">

? ? ? ? ? ? ? ? <div class="page4-group2">

? ? ? ? ? ? ? ? ? ? <div class="page4-img-group1" id="page4-img-group" style="top:0;z-index: -1;">

? ? ? ? ? ? ? ? ? ? ? ? <img class="page5-logo" src="img/page5_logo.png" alt="">

? ? ? ? ? ? ? ? ? ? ? ? <div class="page4-img-bg">

? ? ? ? ? ? ? ? ? ? ? ? ? ? <img id="page5_field_bg" src="img/page4_field_bg1.png" alt="">

? ? ? ? ? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? ? ? ? ? ? <div class="page4-car-bg">

? ? ? ? ? ? ? ? ? ? ? ? ? ? <img id="page5-car-img" src="img/page4_car_bg1.png" alt="">

? ? ? ? ? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? ? ? ? ? ? <div class="page4-sticker-bg">

? ? ? ? ? ? ? ? ? ? ? ? ? ? <img id="page5-sticker-img" src="img/page4_sticker_bg1.png" alt="">

? ? ? ? ? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? ? ? ? ? ? <div class="page4-declaration-bg" id="page5-declaration-bg">

? ? ? ? ? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? ? ? ? ? ? <div class="page5-record">

? ? ? ? ? ? ? ? ? ? ? ? ? ? <p id="page5-personnel-num"></p>

? ? ? ? ? ? ? ? ? ? ? ? ? ? <img class="page5-code" src="img/page5_code.png" alt="">

? ? ? ? ? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? </section>

<section class="main-container">

? ? <footer class="footer-center">

? ? ? ? <button class="btn-share" style="position: fixed;bottom: 0;z-index: 9999;" id="btnShare">截&nbsp;圖</button>

? ? </footer>

</section>

<img id="save" />



function $(selector) {

? ? ? ? return document.querySelector(selector);

? ? }

? ? var main = {

? ? ? ? init:function(){

? ? ? ? ? ? main.setListener();

? ? ? ? },

? ? ? ? //設(shè)置監(jiān)聽事件

? ? ? ? setListener:function(){

? ? ? ? ? ? var btnShare = document.getElementById("btnShare");

? ? ? ? ? ? btnShare.onclick = function(){

? ? ? ? ? ? ? ? main.html2Canvas();

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? //獲取像素密度

? ? ? ? getPixelRatio:function(context){

? ? ? ? ? ? var backingStore = context.backingStorePixelRatio ||

? ? ? ? ? ? ? ? ? ? context.webkitBackingStorePixelRatio ||

? ? ? ? ? ? ? ? ? ? context.mozBackingStorePixelRatio ||

? ? ? ? ? ? ? ? ? ? context.msBackingStorePixelRatio ||

? ? ? ? ? ? ? ? ? ? context.oBackingStorePixelRatio ||

? ? ? ? ? ? ? ? ? ? context.backingStorePixelRatio || 1;

? ? ? ? ? ? return (window.devicePixelRatio || 1) / backingStore;

? ? ? ? },

? ? ? ? //繪制dom 元素,生成截圖canvas

? ? ? ? html2Canvas: function () {

? ? ? ? ? ? var shareContent = $("#page4-img-group");// 需要繪制的部分的 (原生)dom 對(duì)象 ,注意容器的寬度不要使用百分比,使用固定寬度,避免縮放問(wèn)題

? ? ? ? ? ? var width = shareContent.offsetWidth;? // 獲取(原生)dom 寬度

? ? ? ? ? ? var height = shareContent.offsetHeight; // 獲取(原生)dom 高

? ? ? ? ? ? var offsetTop = shareContent.offsetTop;? //元素距離頂部的偏移量

? ? ? ? ? ? var canvas = document.createElement('canvas');? //創(chuàng)建canvas 對(duì)象

? ? ? ? ? ? var context = canvas.getContext('2d');

? ? ? ? ? ? var scaleBy = main.getPixelRatio(context);? //獲取像素密度的方法 (也可以采用自定義縮放比例)

? ? ? ? ? ? console.log(scaleBy);

? ? ? ? ? ? scaleBy = 3;

? ? ? ? ? ? canvas.width = width * scaleBy;? //這里 由于繪制的dom 為固定寬度,居中,所以沒(méi)有偏移

? ? ? ? ? ? canvas.height = (height + offsetTop) * scaleBy;? // 注意高度問(wèn)題,由于頂部有個(gè)距離所以要加上頂部的距離,解決圖像高度偏移問(wèn)題

? ? ? ? ? ? context.scale(scaleBy, scaleBy);

? ? ? ? ? ? var opts = {

? ? ? ? ? ? ? ? allowTaint:true,//允許加載跨域的圖片

? ? ? ? ? ? ? ? tainttest:true, //檢測(cè)每張圖片都已經(jīng)加載完成

? ? ? ? ? ? ? ? scale:scaleBy, // 添加的scale 參數(shù)

? ? ? ? ? ? ? ? canvas:canvas, //自定義 canvas

? ? ? ? ? ? ? ? logging: true, //日志開關(guān),發(fā)布的時(shí)候記得改成false

? ? ? ? ? ? ? ? width:width, //dom 原始寬度

? ? ? ? ? ? ? ? height:height //dom 原始高度

? ? ? ? ? ? };

? ? ? ? ? ? html2canvas(shareContent, opts).then(function (canvas) {

? ? ? ? ? ? ? console.log("html2canvas");

? ? ? ? ? ? ? alert(canvas.toDataURL())

? ? ? ? ? ? ? ? var body = document.getElementsByTagName("body");

? ? ? ? ? ? ? ? canvas.style.width = canvas.width / scaleBy + "px";

? ? ? ? ? ? ? ? canvas.style.height = canvas.height / scaleBy + "px";

//? ? ? ? ? ? ? body[0].appendChild(canvas);

? ? ? ? ? ? ? ? var src = canvas.toDataURL();

? ? ? ? ? ? ? ? var img = document.getElementById("save");

? ? ? ? ? ? ? ? save.src = src;

? ? ? ? ? ? ? ? save.style.width? = canvas.style.width;

? ? ? ? ? ? ? ? save.style.height? = canvas.style.height;

//? ? ? ? ? ? ? console.log(src);

? ? ? ? ? ? });

? ? ? ? }

? ? };

? ? //最后運(yùn)行代碼

? ? main.init();

把代碼放到服務(wù)器上可生成圖片成功

?著作權(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)容

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