国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用html2canvas,將頁面轉(zhuǎn)換成圖片的圖片模糊等踩坑記錄(Web/Taro h5)

這篇具有很好參考價值的文章主要介紹了使用html2canvas,將頁面轉(zhuǎn)換成圖片的圖片模糊等踩坑記錄(Web/Taro h5)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

使用html2canvas將頁面轉(zhuǎn)換成圖片的采坑記錄

 "html2canvas": "^1.4.1",
 "@tarojs/taro": "3.4.0-beta.0"

問題:

1. 生成的圖片很模糊
2. 生成的圖片是空白
3. 生成的圖片不完整

截圖前是這樣
html2canvas圖片模糊,Taro+Nutui+ts,小程序,項目開發(fā)的爬坑記錄合集,前端,taro,小程序
截圖后這樣
html2canvas圖片模糊,Taro+Nutui+ts,小程序,項目開發(fā)的爬坑記錄合集,前端,taro,小程序
截圖后的圖片圖片缺省了一部分

解決方案

問題1: 生成的圖片很模糊(圖片跨域)

方法一: 將canvas放大n倍再作圖;

移動端的話,根據(jù)移動設(shè)備的devicePixelRatio (devicePixelRatio 返回當前顯示設(shè)備的物理像素分辨率與CSS 像素分辨率之比)決定縮放比例;也可以默認放大兩倍轉(zhuǎn)換

方法二: 使用<img>來實現(xiàn)background-image的效果

只有作為background-image的背景圖會模糊,而<img>圖片標簽是沒有這個問題的。

問題2: 生成的圖片是空白(圖片跨域)

首先確定轉(zhuǎn)換后的canvas的寬高是否正確,如果不正確,就需要給html2canvas傳遞寬高參數(shù) !!!

沒有寬高問題,然后再細細排查發(fā)現(xiàn),在使用 轉(zhuǎn)換的時候圖片有跨域問題,導致轉(zhuǎn)換失敗,所以轉(zhuǎn)換成了空白圖片(大概率都是這個原因);將圖片去掉就可以正常轉(zhuǎn)換頁面的

html2canvas圖片模糊,Taro+Nutui+ts,小程序,項目開發(fā)的爬坑記錄合集,前端,taro,小程序

解決方案:

方案一:

后端需要在服務(wù)器IIS上的HTTP響應(yīng)標頭設(shè)置,最簡單粗暴的方法就是全部設(shè)置成*,不過這樣安全性也低,自己可以根據(jù)自己需求設(shè)置

access-control-allow-credentials:true
Access-Control-Allow-Headers:*
access-control-allow-origin:*
方案二:

在要生成canvas的DOM中的每一個img標簽上設(shè)置 crossorigin="anonymous" 屬性,并且給資源地址加上固定的隨機數(shù)(避免緩存)

  1. 給html2anvas添加useCORS:true屬性
  2. 給要生成canvas的DOM中的每一個img標簽上設(shè)置 crossorigin="anonymous" 屬性
  3. 確保你的圖片CDN服務(wù)器支持CORS訪問,也就是會返回Access-Control-Allow-Origin等響應(yīng)頭

在Taro中給img加上該屬性之后沒生效,因為
html2canvas圖片模糊,Taro+Nutui+ts,小程序,項目開發(fā)的爬坑記錄合集,前端,taro,小程序在taro中節(jié)點被把包裹了一層taro-image-core節(jié)點導致img屬性并沒有設(shè)置到img上(所有在taro上該方法不適用)

方案三:

使用html2canvas提供的跨域解決方案
allowTaint: trueuseCORS: true 都是解決跨域問題的方式,不同的是使用allowTaint 會對canvas造成污染,導致無法使用canvas.toDataURL 方法;所以這里就給html2canvas添加useCORS: true,試了一下還是跨域 -.-

方案四

修改html2canvas的源碼(最終解決方案)
核心思想也就是使用方法二,修改html2canvas源碼:

html2canvas圖片模糊,Taro+Nutui+ts,小程序,項目開發(fā)的爬坑記錄合集,前端,taro,小程序
html2canvas圖片模糊,Taro+Nutui+ts,小程序,項目開發(fā)的爬坑記錄合集,前端,taro,小程序

1.給 html2canvas添加useCORS: true 參數(shù)
2. 設(shè)置 img.crossOrigin = 'anonymous'(img.crossOrigin = ""img.crossOrigin = 'anonymous’是等價的)
3.給資源地址添加
時間戳數(shù)/一個固定的字符串
,避免讀取到瀏覽器緩存數(shù)據(jù),推薦后者

設(shè)置好紅框里的內(nèi)容之后就可以成功的轉(zhuǎn)換了;也沒有跨域的錯了

由于項目限制,我的圖片是不支持CORS訪問的,所以選擇了方案四解決問題

問題3: 生成的圖片不完整

截圖不完整是因為我將該圖片進行了旋轉(zhuǎn),解決方案就是:

第一步: 給該圖片元素添加一個正方形的父元素

給足空間,保證該圖片元素在旋轉(zhuǎn)都在這個容器內(nèi)

第二步: 一般情況步驟一就可以解決問題了,但我在設(shè)置了第一步之后圖片還是不完整

經(jīng)排查發(fā)現(xiàn)子元素圖片有設(shè)置 overflow: hidden;(因為taro在img節(jié)點外包裹了一層 taro-image-core節(jié)點 小程序),需要將overflow: hidden改成 overflow: visible 問題就解決了

Taro h5代碼:

let node = document.querySelector('#html2canvas-dom');
html2canvas(element, {
    useCORS: true,
    scale: window.devicePixelRatio < 3 ? window.devicePixelRatio : 2,
    width: node?.clientWidth || canvasOption.width,
    height: node?.clientHeight || canvasOption.height
}).then(canvas => {
    // imgUrl 是圖片的 base64格式
    const imgurl = canvas.toDataURL('image/png');
    Taro.uploadFile({
        url: '***',
        filePath: imgurl,
        name: 'file',
        header: {
            'X-Auth-Token': '****'
        },
        formData: {
            method: 'POST',
            fileType: 'png'
        },
        success: res => {
            // ...
        }
    });
});

參考
html2canvas 采坑記錄
html2canvas跨域
html2canvas截圖如何解決跨域
dom從旋轉(zhuǎn)html2canvas截取圖片文章來源地址http://www.zghlxwxcb.cn/news/detail-754810.html

到了這里,關(guān)于使用html2canvas,將頁面轉(zhuǎn)換成圖片的圖片模糊等踩坑記錄(Web/Taro h5)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 小程序采用html2canvas實現(xiàn)html轉(zhuǎn)canvas保存圖片

    mpaas小程序中采用html2canvas實現(xiàn)html轉(zhuǎn)canvas保存圖片 使用uniapp將代碼打包一份h5部署到服務(wù)器 h5要保存的圖片組件頁面report.vue 安裝 npm install --save html2canvas 或 yarn add html2canvas 引入import html2canvas from ‘html2canvas’; ts 小程序中采用webview跳轉(zhuǎn)到h5頁面

    2024年02月11日
    瀏覽(23)
  • html2canvas 下載圖片,scale、dpi處理圖像模糊

    1、安裝html2canvas 依賴 2、 引入html2canvas.js 3、html 4、方法,scale和dpi 解決模糊 html2canvas.js是從git上下載的: https://github.com/eKoopmans/html2canvas/tree/develop/dist 單純下載圖片方法 === 參考: 1、解決html2canvas截圖模糊的問題 2、html2canvas生成圖片模糊 不清楚?兩種解決方法 3、html2canvas在

    2024年02月17日
    瀏覽(22)
  • uniapp APP端使用html2canvas截圖分享小程序卡片圖片模糊、跨域等問題解決

    項目場景:uniapp? APP端,分享小程序到微信好友,使用html2canvas截取當前頁面做卡片封面圖。僅是需要展示部分內(nèi)容用作卡片封面就可以,不強制需要全屏截圖。 問題1、部分頁面截取到的圖片分享到微信后卡片圖片模糊。 問題2、截圖時報錯:Failed to execute \\\'toDataURL\\\' on \\\'HTMLC

    2024年02月05日
    瀏覽(24)
  • Html2canvas——圖片空白的幾種排查解決方案

    Html2canvas——圖片空白的幾種排查解決方案

    下列文章來源該篇 ? 一、工作原理 html2canvas庫的工作原理并不是真正的“截圖”,而是讀取網(wǎng)頁上的目標DOM節(jié)點的信息來繪制canvas,所以它并不支持所有的css屬性。 二、在 img標簽中加載外部圖片 前提是外部圖片允許跨域,需要服務(wù)器設(shè)置 以nginx為例,response-header內(nèi)要存在

    2024年03月20日
    瀏覽(21)
  • html2canvas使用文檔

    Install NPM Install Yarn 以 vue 舉例,這樣寫起來比較方便 如果想要將圖片導出,可以這樣寫 名稱 默認值 描述 allowTaint false 是否允許跨源圖像污染畫布 backgroundColor #ffffff 畫布背景色(如果在DOM中未指定),為透明設(shè)置null canvas null 用作繪圖基礎(chǔ)的現(xiàn)有畫布元素 foreignObjectRendering

    2024年03月28日
    瀏覽(21)
  • html2canvas使用指南

    html2canvas使用指南

    ? 最近項目中需要使用到將網(wǎng)頁中的內(nèi)容下載成圖片,通過按鈕點擊將頁面保存下來,方便同事使用進行工作匯報。如圖: 然后我想到了 html2canvas ,就可以解決我現(xiàn)在遇到的問題了。我火速從官網(wǎng)下載了js文件,這里附上鏈接: ? http://html2canvas.hertzen.com/ ?這里 ? html2canvas

    2024年02月14日
    瀏覽(21)
  • 純前端--原生js將html頁面變成pdf文件(html2canvas+jsPDF)

    1、將文檔放在本地,用原生js進行引用和使用。 ① 新建一個名為 html2canvas.min.js 的文件,并且將線上的內(nèi)容進行復制。 ② 引入 js 文件: 2、使用 npm 進行安裝使用: 待續(xù)。。。 github 中文網(wǎng)站 CDN Jspdf.es.js:ES 2015 模塊格式。 Jspdf.umd.js:UMD模塊格式,用于 AMD 或腳本標簽加載

    2024年02月08日
    瀏覽(21)
  • vue2如何將頁面生成 pdf 導出 html2Canvas + jspdf

    vue2如何將頁面生成 pdf 導出 html2Canvas + jspdf

    npm i html2canvas npm i jspdf import html2canvas from \\\'html2canvas\\\'; import jsPDF from \\\'jspdf\\\' export const htmlToPDF = async (htmlId, title = \\\"報表\\\", bgColor = \\\"#fff\\\") = { ? let pdfDom = document.getElementById(htmlId) ? pdfDom.style.padding = \\\'0 10px !important\\\' ? const A4Width = 595.28; ? const A4Height = 841.89; ? let canvas = await html2canvas(pd

    2024年02月16日
    瀏覽(24)
  • Html轉(zhuǎn)PDF,前端JS實現(xiàn)Html頁面導出PDF(html2canvas+jspdf)

    Html轉(zhuǎn)PDF,前端JS實現(xiàn)Html頁面導出PDF(html2canvas+jspdf)

    一、背景介紹 ? 當我們在不想改變后端代碼的同時想是純html頁面導出PDF,那么(html2canvas+jspdf)就是無疑最好的選擇,導出時它不占用我們服務(wù)器的資源,而是由用戶本地自行執(zhí)行js文件下載PDF,不占用我們系統(tǒng)的帶寬,所以這無非是最好的選擇方式。 二、疑問 1、為什么要

    2024年01月23日
    瀏覽(25)
  • 前端生成pdf之html2canvas+jsPDF,以及解決圖片不顯示bug

    開發(fā)背景: 需要給頁面中相應(yīng)的內(nèi)容生成pdf,查找文檔后發(fā)現(xiàn)要用到兩個插件。html2canvas 以及 jsPDF html2canvas 給dom結(jié)構(gòu)轉(zhuǎn)化為canvas,然后生成各種類型圖片 jsPDF 把canvas 生成的圖片url 轉(zhuǎn)化為pdf 參數(shù) image:表示要插入的圖片資源,可以是圖片文件的路徑或者base64編碼字符串。

    2024年02月02日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包