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

【vue-qrcode + html2canvas】前端二維碼生成與下載

這篇具有很好參考價(jià)值的文章主要介紹了【vue-qrcode + html2canvas】前端二維碼生成與下載。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、前言

其實(shí)一開始搜的時(shí)候,很多還都是推薦的 vue-qrcode,于是就先用這個(gè),但是發(fā)現(xiàn)想要在二維碼中間放一個(gè)自定義的image的時(shí)候,這個(gè)庫(kù)有點(diǎn)麻煩,需要自己將 image 圖片蓋在二維碼上面(官方教程也是如此)。好吧,一開始我也這么干了,但是蓋完之后,我需要下載這個(gè)有居中圖片的二維碼的時(shí)候,又是一個(gè)坑,因?yàn)閷?shí)際上這是兩張圖,你要下載合成的圖片的話,還需要引入生成圖片的插件。。。

于是,懷著一顆偷懶的心,又去了解了一下 vue-qr ,發(fā)現(xiàn)這個(gè)家伙既可以自己合成帶自定義圖片的二維碼,又能直接下載合成后的二維碼,而且開放的花樣參數(shù)也很多,簡(jiǎn)直太秀了!方便!妙呀!。。。but 好景不長(zhǎng),很快發(fā)現(xiàn)一堆bug!

vue-qr bug1:生成自定義圖片二維碼,耗時(shí)特別長(zhǎng),關(guān)鍵發(fā)到生產(chǎn)上還會(huì)有圖片資源跨域請(qǐng)求的報(bào)錯(cuò),臨時(shí)的解決方案就是放了一張本地固定的logo圖片合成到了二維碼中間。。。
vue-qr bug2:糊!太糊了!要解決這個(gè)糊的問題,只能是放大二維碼的尺寸,放大后我頁面直接丑裂開了。。。
vue-qr 以上的這兩個(gè)bug也都在 issues 上提及到,樓主表示上游依賴庫(kù)年老陳舊,亦無力回天。。。

事已至此,也只能好馬也要吃回頭草,再次換上 vue-qrcode + 一個(gè)生成圖片的庫(kù)。

二、說正事

vue-qr 這個(gè)二維碼庫(kù)還是有點(diǎn)坑,二維碼和 logo都太糊了,而且還會(huì)有跨域問題!

  • github: https://github.com/Binaryify/vue-qr
  • 二維碼太糊-issue: https://github.com/Binaryify/vue-qr/issues/50
  • 跨域同類-issue: https://github.com/Binaryify/vue-qr/issues/87

后面還是換成 vue-qrcode

  • github: https://github.com/fengyuanchen/vue-qrcode
  • Demo: https://fengyuanchen.github.io/vue-qrcode/#add-a-logo

兩者對(duì)比一下

  • vue-qr:依賴上游框架,很老基本不維護(hù)了,用的人也少。
  • vue-qrcode:相對(duì)較新,用的人更多,但是功能比較簡(jiǎn)單。
  • vue-qrcode 需要二開部分:logo居中、下載圖片需要自己再合成一下。

三、其他庫(kù):截圖 & 下載

  1. 截圖(生成圖片):html2canvas
    2. 下載文件(保存本地):file-saver
  2. 下載圖片:上面那個(gè) FileSaver 庫(kù)主要用來 下載文件 的,如果只是 下載圖片 的話大可不必,改用 a 標(biāo)簽的方法下載圖片即可。
// 看這部分的案例代碼即可
/** 下載圖片 */
function downloadImage(imgUrl, imgName) {
  const a = document.createElement('a');
  a.href = imgUrl;
  a.download = imgName || 'image.png';
  a.style.display = 'none';
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
}

/** 生成圖片并下載 */
function downloadDivAsImage(divId) {
  const div = document.getElementById(divId);
  if (!div) {
    console.error(`Cannot find div with id: ${divId}`);
    return;
  }

  html2canvas(div, {
    allowTaint: true,
    useCORS: true,
  }).then(canvas => {
    const image = canvas.toDataURL('image/png');
    downloadImage(image, `${divId}.png`);
  });
}

3.1 安裝

npm install html2canvas
#或
yarn add html2canvas
#或
pnpm add html2canvas

3.2 使用(下載文件的話可以參考這個(gè)例子)

在前端開發(fā)中,如果你想將 HTML 頁面中的某個(gè)

內(nèi)容保存為圖片并下載到本地,你可以使用 html2canvas 和 FileSaver.js 這兩個(gè)庫(kù)來實(shí)現(xiàn)。

html2canvas 可以將 HTML 元素轉(zhuǎn)換為 元素,然后你可以使用 canvas.toDataURL() 方法將其轉(zhuǎn)換為圖片。接著,你可以使用 FileSaver.js 來保存這個(gè)圖片到本地。

import html2canvas from 'html2canvas';  
import { saveAs } from 'file-saver';  
  
function downloadDivAsImage(divId) {  
    const div = document.getElementById(divId);  
    if (!div) {  
        console.error(`Cannot find div with id: ${divId}`);  
        return;  
    }  
  
    html2canvas(div).then(canvas => {  
        const image = canvas.toDataURL('image/png');  
        const blob = dataURItoBlob(image);  
        saveAs(blob, `${divId}.png`);  
    });  
}  
  
function dataURItoBlob(dataURI) {  
    const byteString = atob(dataURI.split(',')[1]);  
    const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];  
    const ab = new ArrayBuffer(byteString.length);  
    const ia = new Uint8Array(ab);  
    for (let i = 0; i < byteString.length; i++) {  
        ia[i] = byteString.charCodeAt(i);  
    }  
    return new Blob([ia], { type: mimeString });  
}  
  
// 使用方法:傳入你想下載的 div 的 id  
downloadDivAsImage('yourDivId');

3.3 html2canvas圖片截圖失?。▓D片資源跨域問題)

我的應(yīng)用場(chǎng)景就涉及到第三方圖片截圖失敗的問題,這里需要對(duì) html2canvas-options 做一些跨域處理的配置,如下:
html2canvas 二維碼,VueJs 開發(fā)筆記,H5,VueJs,vue-qrcode,html2canvas,前端二維碼,二維碼生成與下載,vue.js文章來源地址http://www.zghlxwxcb.cn/news/detail-853893.html

3.4 其他注意事項(xiàng)

  • 確保你的 div 內(nèi)容是可見的,因?yàn)?html2canvas 只能捕獲可見的內(nèi)容。
  • 由于跨域問題,如果
    中的圖片或其他資源來自其他域,可能會(huì)遇到問題。確保所有資源都是同源的,或者已經(jīng)設(shè)置了適當(dāng)?shù)?CORS 策略。關(guān)于 html2canvas 一些配置可以參考: html2canvas-options

到了這里,關(guān)于【vue-qrcode + html2canvas】前端二維碼生成與下載的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Vue使用html2canvas將DOM節(jié)點(diǎn)生成對(duì)應(yīng)的PDF

    要通過Vue使用html2canvas將DOM節(jié)點(diǎn)生成對(duì)應(yīng)的PDF,您需要安裝html2canvas和jspdf這兩個(gè)庫(kù)。html2canvas用于將DOM節(jié)點(diǎn)轉(zhuǎn)換為Canvas,而jspdf用于將Canvas轉(zhuǎn)換為PDF。以下是一個(gè)簡(jiǎn)單的示例代碼,展示了如何使用html2canvas和jspdf生成PDF文件: 首先,安裝html2canvas和jspdf依賴: 然后,在Vue組件中

    2024年02月11日
    瀏覽(22)
  • vue2如何將頁面生成 pdf 導(dǎo)出 html2Canvas + jspdf

    vue2如何將頁面生成 pdf 導(dǎo)出 html2Canvas + jspdf

    npm i html2canvas npm i jspdf import html2canvas from \\\'html2canvas\\\'; import jsPDF from \\\'jspdf\\\' export const htmlToPDF = async (htmlId, title = \\\"報(bào)表\\\", 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)
  • vue3中,使用html2canvas截圖包含視頻、圖片、文字的區(qū)域

    vue3中,使用html2canvas截圖包含視頻、圖片、文字的區(qū)域

    需求:將頁面中指定區(qū)域進(jìn)行截圖,區(qū)域中包含了圖片、文字、視頻。 第一步,先安裝 第二步,在頁面引入: 第三步,頁面使用: 1)html部分: 2)js部分: 剛開始我截出的圖只有文字,插圖和視頻部分是空白的,并沒有將頁面的插圖和視頻截進(jìn)去,最終發(fā)現(xiàn)是 跨域 導(dǎo)致的

    2024年02月06日
    瀏覽(26)
  • 【前端】html2canvas生成圖片空白排查data:;(js vue react uniapp)

    【前端】html2canvas生成圖片空白排查data:;(js vue react uniapp)

    因?yàn)橐鲆粋€(gè)分享圖,就用到了html2canvas,一開始是好好的,今天隨便測(cè)了下,發(fā)現(xiàn)圖片顯示不出來了。打印了下,生成的圖片鏈接變成了 data:; 。后面一步一步地排查,發(fā)現(xiàn)是頁面內(nèi)容太多了,刪減一點(diǎn)內(nèi)容就能顯示出來。然后我又去認(rèn)真看了下html2canvas的各個(gè)參數(shù),發(fā)現(xiàn)可

    2024年02月03日
    瀏覽(23)
  • vue-element使用html2canvas實(shí)現(xiàn)網(wǎng)頁指定區(qū)域(指定dom元素)截圖

    直接上代碼: ** 如果要截取的dom元素、區(qū)域涉及到v-if或者v-show的條件表達(dá)式時(shí),截取的方法請(qǐng)?jiān)趎extTick里面調(diào)用----例如: this.$nextTick(() = { this.saveImageNew() }) 否之獲取dom元素的時(shí)候會(huì)獲取不到!?。。。。。?!

    2024年02月04日
    瀏覽(28)
  • html2canvas使用文檔

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

    2024年03月28日
    瀏覽(21)
  • html2canvas截圖模糊問題

    最近項(xiàng)目中使用的html2canvas插件打印報(bào)表時(shí),發(fā)現(xiàn)出現(xiàn)報(bào)表模糊的問題,而實(shí)際上是插件生成的圖片中的像素發(fā)生了偏移。 后來查閱html2canvas源碼中,發(fā)現(xiàn)了以下參數(shù): 參數(shù)名稱 默認(rèn)值 描述 scale 1 按比例增加分辨率(2=雙倍) dpi 96 將分辨率提高到特定的DPI(每英寸點(diǎn)數(shù))

    2024年01月17日
    瀏覽(36)
  • html2canvas使用指南

    html2canvas使用指南

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

    2024年02月14日
    瀏覽(21)
  • html2canvas截圖生產(chǎn)海報(bào)圖片

    圖片地址后添加?time=${new Date().valueOf()},不然會(huì)報(bào)圖片跨域報(bào)錯(cuò) 原因:這是因?yàn)槟鉯mg是在緩存數(shù)據(jù)中讀取的 并沒有訪問遠(yuǎn)程這個(gè)圖片的時(shí)候沒有攜帶請(qǐng)求頭。 確保你的圖片服務(wù)器支持CORS訪問,也就是會(huì)返回Access-Control-Allow-Origin等響應(yīng)頭;

    2024年02月02日
    瀏覽(29)
  • vue中使用html2canvas報(bào)錯(cuò) Unable to find element in cloned iframe

    vue中使用html2canvas報(bào)錯(cuò) Unable to find element in cloned iframe

    安裝 npm install --save html2canvas 使用 home.vue ?。?bào)錯(cuò) Uncaught (in promise) Unable to find element in cloned iframe 原因:使用了 elementUI中的el-popover組件,掛載到body里的 解決:

    2024年01月19日
    瀏覽(113)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包