欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 詳解canvas.toDataURL()報錯的解決方案全都在這了

詳解canvas.toDataURL()報錯的解決方案全都在這了

熱門標(biāo)簽:南昌仁和怎么申請開通400電話 平?jīng)龅貓D標(biāo)注位置怎么弄 只辦理400電話 機(jī)器人外呼系統(tǒng)存在哪些能力 如何獲取地圖標(biāo)注客戶 電話機(jī)器人黑斑馬免費 高德地圖標(biāo)注地點糾錯 拓展地圖標(biāo)注 電話機(jī)器人電銷系統(tǒng)掙話費

報錯詳盡信息

Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

關(guān)鍵詞

  • canvas.toDataURL()
  • crossOrigin
  • Access-Control-Allow-Origin

前言

最近在做一個創(chuàng)意類的圖片合成工具,大概齊就是通過拼接自定義的文字和圖片信息生成一張商品圖片類似的功能,項目中用到了fabric.js這個畫板庫,最后一步在保存圖片的時候報上面的一長串錯誤,墻內(nèi)墻外搜了一遍,給出的解決方案都不全面,為避免同學(xué)們再次踩坑,于是有了此文

正文

我們在convertDOM2Image時,如果DOM內(nèi)存在圖片資源,該資源所在的web-server是不支持跨域的,保存圖片是不會成功的。

因此在排查問題時,首先要確定

  • web-server是否允許跨域,我們以nginx為例,response-header內(nèi)要存在Access-Control-Allow-Orgin:xxxx(可以是*,安全性要求比較高的可以根據(jù)主域名自定義)
  • 如果是img標(biāo)簽, 是否添加了crossorigin="anonymous", 如果是Image對象,同樣是否添加了改屬性obj.crossOrigin='anonymous'
  • 如果還不行,這里先不把答案放出來,我們先看看栗子

在接下來的栗子中我們會用到將Image轉(zhuǎn)換為canvas對象的方法

function convertImageToCanvas(image) {
// 創(chuàng)建canvas DOM元素,并設(shè)置其寬高和圖片一樣 
let canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
canvas.getContext("2d").drawImage(image, 0, 0);
// 我們在實際的開發(fā)中,需要將抓換后的base64圖片編碼傳輸?shù)胶笈_圖片服務(wù)器,由server直接存儲或者生成一張圖片;
// 所以會用到 toDataURL
console.log(canvas.toDataURL('image/jpeg'))
return canvas;
}

栗子1

本地未設(shè)置跨域允許選項crossorigin=anonymous,web-server未設(shè)置跨域允許選項

<div id="d1">
<img style="width: 300px;height: 240px;" src="http://jb51.net/images/cover_thumbnail_3rd.jpg" alt="">
<p>本地未設(shè)置跨域允許選項crossorigin=anonymous,web-server未設(shè)置跨域允許選項</p>
</div>
<button onclick="setCanvas('d1')">canvas保存</button>
function setCanvas(DOMID) {
let img = document.getElementById(DOMID).querySelector('img')
document.body.appendChild(convertImageToCanvas(img))
}

很顯然,報錯

栗子2

本地標(biāo)簽內(nèi)設(shè)置跨域允許選項, web-server未設(shè)置跨域允許選項

這次連圖片都出不來,直接報錯

這個好理解,瀏覽器同源策略限制嘛

Access to image at 'xxxx' (redirected from 'xxxx') from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

栗子3

本地未設(shè)置跨域允許選項crossorigin=anonymous, web-server設(shè)置跨域允許選項

報錯,妥妥的。

栗子4

本地標(biāo)簽內(nèi)設(shè)置跨域允許選項crossorigin=anonymous, web-server設(shè)置跨域允許選項

<div id="d4">
<img style="width: 300px;height: 240px;" src="https://img.alicdn.com/tfs/TB1_uT8a5ERMeJjSspiXXbZLFXa-143-59.png" alt="" crossorigin="anonymous">
<p>本地設(shè)置跨域允許選項`crossorigin=anonymous`,`web-server`設(shè)置跨域允許選項</p>
</div>
<button onclick="setCanvas('d4')">canvas保存</button>

居然可以了,但是~如果在代碼內(nèi)設(shè)置跨域呢?

栗子5

function setCanvas(DOMID) {
let img = document.getElementById(DOMID).querySelector('img')

img.crossOrigin= 'anonymous'

document.body.appendChild(convertImageToCanvas(img))
}

報錯

我看官方文檔的意思是必須同步設(shè)置crossOrigin=anonymous,該圖片憑證才會被信任

This means that CORS is enabled and credentials are sent if the image is fetched from the same origin from which the document was loaded.

否則緩存的圖像數(shù)據(jù)仍然會被畫布視為有污染的跨源內(nèi)容.

怎么辦?重新取一遍圖片唄,加個隨機(jī)數(shù),圖片還是那個圖片,不過加了個馬甲,瀏覽器就不認(rèn)識了

栗子6

function setCanvas(DOMID) {
let img = document.getElementById(DOMID).querySelector('img')

img.src =img.src+'?v='+Math.random()
img.crossOrigin= 'anonymous'

img.onload=()=>{
document.body.appendChild(convertImageToCanvas(img))
}
}

binggo, 完美解決

所以我們在開發(fā)過程中,新建圖片,更換圖片,還原圖片等功能代碼內(nèi),最好每一次都加個隨機(jī)數(shù),以保證源都是最新的,不走緩存

多說一點吧,關(guān)于fabric.js的相關(guān)跨域配置見下方

let _fabricConfig = {
// ....
crossOrigin:'anonymous'
};
/* fabric對象 */
let _fabricObj = new fabric.Canvas(id, _fabricConfig);


// 新建圖片對象時
let imgInstance = new fabric.Image.fromURL(url + '?v='+ Math.random(), img => {}, {crossOrigin: 'anonymous'})

// 動態(tài)更新圖片時
let currentActive = _fabricInstance.getActiveObj();
currentActive.setSrc(randomURL, img =>{}, {crossOrigin: 'anonymous'})

github:http://github.com/phillyx

到此這篇關(guān)于詳解canvas.toDataURL()報錯的解決方案全都在這了的文章就介紹到這了,更多相關(guān)canvas.toDataURL()報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

標(biāo)簽:池州 遼源 永州 新疆 漯河 棗莊 西藏 青島

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解canvas.toDataURL()報錯的解決方案全都在這了》,本文關(guān)鍵詞  詳解,canvas.toDataURL,報,錯的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解canvas.toDataURL()報錯的解決方案全都在這了》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解canvas.toDataURL()報錯的解決方案全都在這了的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    欧美一区二区视频网站| 久久美女艺术照精彩视频福利播放| 国产精品久久久久精k8| 国产九色sp调教91| 久久久久久久毛片| 精品国产污污免费网站入口 | 久久久久久久久毛片| 中文字幕乱码一区二区免费| 国产一区二三区| 成年人视频软件| 日本一区二区三区电影| 国产精品系列在线播放| 网站永久看片免费| 国产精品视频一二| 成人免费视频网站在线观看| 国产a免费视频| 亚洲欧美偷拍三级| 老司机av网站| 9191成人精品久久| 日韩国产成人精品| 国产成人精品无码免费看夜聊软件| 欧美高清激情brazzers| 国产精品成人无码免费| 久久久久久影视| 国产成人av电影在线观看| 国产又粗又硬又长又爽| 日韩美女精品在线| 深夜福利网站在线观看| 欧美日韩一区国产| 午夜精品福利一区二区三区av| 私密视频在线观看| 久久久夜色精品亚洲| 国产成人综合亚洲网站| 国产又爽又黄网站| 一级特黄大欧美久久久| free性中国hd国语露脸| 亚洲精品一区二区三区香蕉| 国产精品一区免费视频| 一本大道综合伊人精品热热| 亚洲精品乱码久久久久久久久 | 肉丝美足丝袜一区二区三区四| 欧美日韩aaa| 久久国产尿小便嘘嘘| fc2ppv在线播放| 亚洲欧美日韩中文播放 | 欧美精品 日韩| 玖玖九九国产精品| 亚洲女人久久久| 乱h高h女3p含苞待放| 亚洲私人黄色宅男| 欧美久久久久久久久久久| 日韩欧美一级在线播放| 国产精品一级黄| 在线亚洲人成电影网站色www| 午夜视频一区在线观看| 影音先锋制服丝袜| 亚洲男同性视频| 国产亚洲色婷婷久久99精品91| 国产婷婷色一区二区三区四区| av在线不卡免费看| 欧美成人艳星乳罩| 99天天综合性| 精品国产百合女同互慰| 97精品国产露脸对白| 日韩欧美的一区| www.在线成人| 欧美成人bangbros| 99re这里只有精品6| 日韩欧美国产1| av在线不卡免费看| 欧美不卡一区二区| 91美女视频网站| 国产亚洲欧美一区在线观看| 韩国三级视频在线观看| 国产欧美中文在线| 国产精品无码在线| 亚洲人亚洲人成电影网站色| 人人人妻人人澡人人爽欧美一区| 亚洲精品午夜久久久| 99久久久无码国产精品不卡| 性感美女极品91精品| 国产精品99久久久久久成人| 日韩成人一区二区三区在线观看| 日韩欧美综合视频| 蜜臀久久99精品久久久久久9| 在线观看一区二区精品视频| 激情五月婷婷综合网| 久久久亚洲av波多野结衣| 日韩不卡av在线| 亚洲国产精品人人做人人爽| 国产男女猛烈无遮挡在线喷水| 同产精品九九九| 在线影院国内精品| 国产精品亚洲综合一区在线观看| 欧美一区二区三区视频在线| 99麻豆久久久国产精品免费| 久久久久亚洲蜜桃| 中文字幕丰满乱子伦无码专区| 玉足女爽爽91| 国产精品久久久精品四季影院| 精品一区二区三区蜜桃| 日韩欧美一卡二卡| 亚洲色图丝袜美腿| 亚洲女人毛茸茸高潮| 美女网站一区二区| 91精品综合久久久久久| 男人操女人下面视频| 中文字幕在线一区二区三区| 免费一级suv好看的国产网站| 另类小说欧美激情| 日韩精品中文字幕在线不卡尤物| av电影在线播放| 亚洲一区二区三区在线播放| 色婷婷综合久久久中文一区二区| 国产成人免费在线视频| 国产欧美一区二区精品仙草咪| 国产精品高清无码在线观看| 免费观看成人av| 日韩欧美国产一区二区三区| 日本三级日本三级日本三级极| 一区二区三区精品久久久| 色88888久久久久久影院野外| 成人性视频网站| 国产精品美女久久久久aⅴ| 中文字幕精品亚洲| 亚洲av成人无码一二三在线观看| 国产精品久久久久久久久快鸭 | 女教师淫辱の教室蜜臀av软件| 韩国一区二区三区| 久久无码av三级| 精品人妻中文无码av在线| 美国三级日本三级久久99| 精品国产一区二区精华 | 亚洲成人动漫在线免费观看| 精品视频一区二区三区免费| 中文在线字幕观看| 丝袜亚洲另类欧美| 日韩欧美三级在线| 国产jjizz一区二区三区视频| 极品美女销魂一区二区三区免费| 久久久久久久综合日本| 国产亚洲精品久久久久久豆腐| 国产999精品久久久久久绿帽| 中文字幕第一区第二区| 色综合久久中文综合久久97| 91在线观看美女| 午夜视频久久久久久| 精品久久久网站| 香蕉久久久久久久| 成人丝袜视频网| 亚洲一区免费观看| 日韩精品一区二区在线| 久久视频精品在线观看| 懂色av中文一区二区三区 | 中文写幕一区二区三区免费观成熟| 亚洲第一搞黄网站| 91传媒理伦片在线观看| 免费人成网站在线观看欧美高清| 久久―日本道色综合久久| 艳母动漫在线看| 一本一本久久a久久| 激情国产一区二区| 中文字幕一区日韩精品欧美| 欧美三级三级三级| 扒开jk护士狂揉免费| 风间由美一区二区三区在线观看 | 国产伦精品一区二区三区妓女 | 日韩欧美一二三| 又色又爽的视频| 精品国产午夜福利在线观看| 日本欧美在线看| 欧美激情中文字幕一区二区| 欧美在线一区二区| 国产高潮呻吟久久| 91网上在线视频| 乱一区二区av| 亚洲欧美一区二区不卡| 日韩欧美二区三区| 色综合久久久久综合体桃花网| 国产原创剧情av| 国产成人在线视频网址| 亚洲成人av在线电影| 国产丝袜在线精品| 欧美图区在线视频| 欧美成人另类视频| 中文字幕永久免费| 国产成人8x视频一区二区| 亚洲国产精品视频| 国产精品视频yy9299一区| 3atv在线一区二区三区| 亚洲波多野结衣| 亚洲精品理论片| 97se亚洲国产综合自在线不卡| 免费观看在线色综合| 亚洲色图都市小说| www国产精品av| 欧美日韩国产精品成人| 国产极品美女在线| 法国空姐电影在线观看| 精品国产一二区|