亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

詳解如何解決canvas圖片getImageData,toDataURL跨域問題

2024-08-26 00:21:01
字體:
供稿:網(wǎng)友

一、首先,圖片服務(wù)器需要配置Access-Control-Allow-Origin

一般團(tuán)隊(duì)都會(huì)有一個(gè)專門域名放置靜態(tài)資源,例如騰訊是gtimg.com,百度是bdimg.com;或者很多團(tuán)隊(duì)使用的是騰訊云或者阿里云的服務(wù)。

而主頁面所在域名往往不一樣,當(dāng)需要需要對(duì)canvas圖片進(jìn)行g(shù)etImageData()或toDataURL()操作的時(shí)候,跨域問題就出來了,而且跨域問題還不止一層。

首先,第一步,圖片服務(wù)器需要配置Access-Control-Allow-Origin信息,例如:

如PHP添加響應(yīng)頭信息,*通配符表示允許任意域名:

header("Access-Control-Allow-Origin: *");

或者指定域名:

header("Access-Control-Allow-Origin: www.zhangxinxu.com");

此時(shí),Chrome瀏覽器就不會(huì)有Access-Control-Allow-Origin相關(guān)的錯(cuò)誤信息了,但是,還會(huì)有其他的跨域錯(cuò)誤信息。

二、canvas圖片getImageData cross-origin跨域問題

對(duì)于跨域的圖片,只要能夠在網(wǎng)頁中正常顯示出來,就可以使用canvas的drawImage() API繪制出來。但是如果你想更進(jìn)一步,通過getImageData()方法獲取圖片的完整的像素信息,則多半會(huì)出錯(cuò)。

舉例來說,使用下面代碼獲取github上的自己頭像圖片信息:

var canvas = document.createElement('canvas');var context = canvas.getContext('2d');var img = new Image();img.onload = function () {    context.drawImage(this, 0, 0);    context.getImageData(0, 0, this.width, this.height);};img.src = 'https://avatars3.githubusercontent.com/u/496048?s=120&v=4';';

結(jié)果在Chrome瀏覽器下顯示如下錯(cuò)誤:

Uncaught DOMException: Failed to execute ‘getImageData’ on ‘CanvasRenderingContext2D’: The canvas has been tainted by cross-origin data.

canvas,圖片,getImageData,toDataURL,跨域

Firefox瀏覽器錯(cuò)誤為:

SecurityError: The operation is insecure.

如果使用的是canvas.toDataURL()方法,則會(huì)報(bào):

Failed to execute ‘toDataURL’ on ’HTMLCanvasElement’: Tainted canvased may not be exported

原因其實(shí)都是一樣的,跨域?qū)е隆?/p>

那有沒有什么辦法可以解決這個(gè)問題呢?

可以試試crossOrigin屬性。

三、HTML crossOrigin屬性解決資源跨域問題

在HTML5中,有些元素提供了支持CORS(Cross-Origin Resource Sharing)(跨域資源共享)的屬性,這些元素包括<img>,<video>,<script>等,而提供的屬性名就是crossOrigin屬性。

因此,上面的跨域問題可以這么處理:

var canvas = document.createElement('canvas');var context = canvas.getContext('2d');var img = new Image();img.crossOrigin = '';img.onload = function () {    context.drawImage(this, 0, 0);    context.getImageData(0, 0, this.width, this.height);};img.src = 'https://avatars3.githubusercontent.com/u/496048?s=120&v=4';';

增加一個(gè)img.crossOrigin = ''即可,雖然JS代碼這里設(shè)置的是空字符串,實(shí)際上起作用的屬性值是anonymous。

crossOrigin可以有下面兩個(gè)值:

 

關(guān)鍵字 釋義
anonymous 元素的跨域資源請(qǐng)求不需要憑證標(biāo)志設(shè)置。
use-credentials 元素的跨域資源請(qǐng)求需要憑證標(biāo)志設(shè)置,意味著該請(qǐng)求需要提供憑證。

 

其中,只要crossOrigin的屬性值不是use-credentials,全部都會(huì)解析為anonymous,包括空字符串,包括類似'abc'這樣的字符。

例如:

img.crossOrigin = 'abc';console.log(img.crossOrigin);    // 結(jié)果是'anonymous'

canvas,圖片,getImageData,toDataURL,跨域

另外還有一點(diǎn)需要注意,那就是雖然沒有crossOrigin屬性,和設(shè)置crossOrigin="use-credentials"在默認(rèn)情況下都會(huì)報(bào)跨域出錯(cuò),但是性質(zhì)上卻不一樣,兩者有較大區(qū)別。

crossOrigin兼容性

IE11+(IE Edge),Safari,Chrome,F(xiàn)irefox瀏覽器均支持,IE9和IE10會(huì)報(bào)SecurityError安全錯(cuò)誤,如下截圖:

canvas,圖片,getImageData,toDataURL,跨域

四、crossOrigin屬性為什么可以解決資源跨域問題?

crossOrigin=anonymous相對(duì)于告訴對(duì)方服務(wù)器,你不需要帶任何非匿名信息過來。例如cookie,因此,當(dāng)前瀏覽器肯定是安全的。

就好比你要去別人家里拿一件衣服,crossOrigin=anonymous相對(duì)于告訴對(duì)方,我只要衣服,其他都不要。如果不說,可能對(duì)方在衣服里放個(gè)竊聽器什么的,就不安全了,瀏覽器就會(huì)阻止。

五、IE10瀏覽器不支持crossOrigin怎么辦?

我們請(qǐng)求圖片的時(shí)候,不是直接通過new Image(),而是借助ajax和URL.createObjectURL()方法曲線救國。

代碼如下:

var xhr = new XMLHttpRequest();xhr.onload = function () {    var url = URL.createObjectURL(this.response);    var img = new Image();    img.onload = function () {        // 此時(shí)你就可以使用canvas對(duì)img為所欲為了        // ... code ...        // 圖片用完后記得釋放內(nèi)存        URL.revokeObjectURL(url);    };    img.src = url;};xhr.open('GET', url, true);xhr.responseType = 'blob';xhr.send();

此方法不僅IE10瀏覽器OK,原本支持crossOrigin的諸位瀏覽器也是支持的。

也就多走一個(gè)ajax請(qǐng)求,還可以!

根據(jù),根據(jù)實(shí)踐發(fā)現(xiàn),在IE瀏覽器下,如果請(qǐng)求的圖片過大,幾千像素那種,圖片會(huì)加載失敗,我猜是超過了blob尺寸限制。

六、結(jié)束語

最近工作中學(xué)到的一點(diǎn)小經(jīng)驗(yàn),希望可以幫到遇到類似問題的小伙伴。也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到HTML教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
日本高清中文字幕| 精品国产一区二区三区四区vr| 日本一区二区在线视频观看| 国产视频在线观看一区二区| 久久久视频免费观看| 91一区在线| av在线第一页| 黑人巨大精品欧美一区二区一视频| 三年片免费观看大全| 久久精品久久精品国产大片| 91色九色蝌蚪| 伊人性伊人情综合网| 日韩高清一区二区| 日韩欧美国产精品综合嫩v| 美女性感视频久久久| 国产亚洲欧美日韩俺去了| 男人的天堂99| 国产精品视频3p| 黄网网址免费| 粉嫩精品一区二区三区在线观看| 在线一区免费观看| 久久精品日产第一区二区三区精品版| 777.av| 97影院秋霞午夜在线观看| 成人av在线播放观看| 亚洲国产精品女人| 黑丝一区二区| 欧美精品免费播放| 日本欧美在线视频| 色视频在线观看免费| 国产精品99久久久久久动医院| 欧美黑人国产人伦爽爽爽| 丰满少妇一级片| 中文字幕在线观看不卡| a√免费观看在线网址www| 久久精品亚洲乱码伦伦中文| 成人三级视频在线观看| 亚洲二区av| 国产又猛又黄的视频| 国模少妇一区二区三区| www亚洲精品| 国产精品1区二区.| 国产精品国产精品国产专区蜜臀ah| 日本视频二区| 中日韩美女免费视频网站在线观看| 亚洲第一狼人区| 日本福利小视频| 精品国产91九色蝌蚪| 欧美性猛交xxx高清大费中文| 国产精品国产三级在线观看| 日韩免费在线视频| 亚洲综合在线五月| 欧美一区二区三区免费大片| 两个人看的在线视频www| 97超碰人人爽| av首页在线观看| 69久久夜色精品国产69| 欧美一区二区三区视频| 男人天堂1024| 免费看的黄色录像| 97视频在线播放| 亚洲品质自拍视频网站| 蜜臀aⅴ国产精品久久久国产老师| 韩国无码一区二区三区精品| 人人做人人草| 添女人荫蒂视频| 日韩福利影视| 竹内纱里奈兽皇系列在线观看| 无码人妻av免费一区二区三区| 成人亚洲视频在线观看| 91精品国产综合久久久久久丝袜| 亚洲av无码专区在线播放中文| 狂野欧美性猛交xxxxx视频| 日本不卡免费高清视频在线| 国产高清不卡视频| 亚洲国产日韩一区| 欧美涩涩网站| 啦啦啦在线视频免费观看高清中文| 日韩一区二区免费视频| 国产麻豆免费观看| 五月婷婷激情五月| 麻豆精品免费视频| 日本亚洲免费观看| 中文有码久久| 成人动漫av在线| 粉嫩小泬无遮挡久久久久久| 青青草成人网| 国产高清自拍视频在线观看| 国产日韩中文在线中文字幕| 夜色77av精品影院| 国产一区在线精品| 国产福利电影一区二区三区| 日韩激情小视频| 国产欧美一区二区精品性色超碰| 欧美一a一片一级一片| 日韩欧美在线一区二区| 色94色欧美一区| 欧美黑人性猛交| 久久精品黄色| 丰满岳乱妇dvd日本| 婷婷社区五月天| 91九色丨porny丨极品女神| 欧美精品一线| 韩国精品美女www爽爽爽视频| 国产乱对白刺激视频不卡| 国产黄色片免费观看| 日本性高潮视频| 国产亚洲午夜高清国产拍精品| 中文字幕一区二区三区四区不卡| 五月天激情国产综合婷婷婷| 日韩av在线精品| 成人国产1314www色视频| 国产bdsm视频| 2020国产精品| 亚洲爆乳无码专区| 成人欧美一区二区三区视频网页| 日日夜夜综合网| 久草视频观看| 国产欧美日韩91| 黄色漫画在线免费观看| 亚洲美女电影在线| 日韩精品一区二区三区色偷偷| 国产日产欧美精品一区二区三区| 日本私人影院在线观看| 免费成人高清| 欧妇女乱妇女乱视频| 日本日本19xxxⅹhd乱影响| 日韩成人在线视频观看| 波多野结衣久久高清免费| 91免费观看视频在线| 精品国产免费一区二区三区四区| 亚洲最大天堂网| 成人免费淫片在线费观看| 秋霞午夜剧场| 97欧洲一区二区精品免费| 韩日欧美一区二区三区| av中文字幕不卡| 欧美精品一区二区免费| 夜夜操免费视频| 蜜桃专区在线| 女同性互吃奶乳免费视频| 国产亚洲一区二区三区不卡| 国产精品特级毛片一区二区三区| 久久国产精品第一页| 亚洲精品婷婷| 天天综合在线视频| 男生女生差差差的视频在线观看| 亚洲成人精品视频在线观看| 欧美日韩高清一区| 国产女18毛片多18精品| 欧美亚洲一区在线| 国产精品无码一区二区三| 中文字幕成人在线观看| 日韩欧美自拍| 91高清视频在线| 日本高清不卡三区| 天堂资源在线观看| 亚洲电影av| 欧美精品一线| 天天操天天爽天天射| 亚洲三级免费电影| 国产成人精品一区二区三区在线| 久草福利资源在线视频| 爱爱永久免费视频| 亚洲精选成人| 天堂久久一区| 国产手机av在线| 高清视频在线观看三级| 国产成a人亚洲精v品在线观看| 99久久国产免费免费| 国产又黄又大又粗的视频| 国产变态拳头交视频一区二区| 喷水视频在线观看| 狠狠久久伊人中文字幕| 亚洲色图欧美另类| eeuss影院130020部| 91精品国产麻豆国产在线观看| 无码粉嫩虎白一线天在线观看| 美女扒开尿口让男人操| 欧美亚洲日本在线观看| 黄色大片中文字幕| 国产又爽又黄视频| 一二区在线观看| 免费精品视频一区| 欧美日韩一级二级三级| 国产精品超碰| 国产精品白浆视频免费观看| a网站在线观看| 国产精品一区二区三区美女| 日韩伦理视频| 综合久久五月天| 亚洲综合色视频在线观看| 国产成人无码a区在线观看视频| 久久不见久久见中文字幕免费| 亚洲乱码国产一区三区| 久久久久久久网| 中文字幕制服丝袜一区二区三区| 国产一区二区在线不卡| 国产成人久久精品麻豆二区| 久久久www免费人成黑人精品| 国产精品女人久久久久久| 国产精品 日韩| 日韩毛片免费观看| 亚洲 欧美 自拍偷拍| 一区二区三区电影网| 少妇一级淫免费播放| 91看片就是不一样| 色偷偷网友自拍| 好吊日在线视频| 宅男网站在线免费观看| 色女人综合av| 亚洲精品国产a久久久久久| 欧美日韩国产二区| 国产电影一区二区三区| 一道精品一区二区三区| 成人亚洲欧美激情在线电影| 男人的天堂导航| 免费电影网站在线观看| 欧美成年人视频在线观看| 久久久久久久一区二区| 蜜臀久久99精品久久一区二区| 亚洲人成网站色ww在线| 成人综合婷婷国产精品久久蜜臀| 日韩欧美精品免费在线| 国产精品300页| 日本黄色小网站| 青青草国产成人久久91网| 亚洲男人天堂av| 国产精品乱码| 99精品国产一区二区青青牛奶| 91精品视频一区| 日韩欧美在线1卡| 成人区精品一区二区婷婷| 狠狠色2019综合网| 日韩一级片免费在线观看| 狠狠久久亚洲欧美| 蜜桃精品一区二区三区| 精品97人妻无码中文永久在线| 天堂va欧美ⅴa亚洲va一国产| 91野花视频| 91av成人在线| 裸体一区二区三区| 亚洲综合中文字幕在线| 国产欧美韩日| 成片免费观看| 欧美激情视频在线免费观看 欧美视频免费一| 日韩av一区二区在线| 97热在线精品视频在线观看| 亚洲电影成人av99爱色| 欧美激情网站在线观看| 亚洲精品一区二三区| 夜夜摸夜夜操| 久久亚洲成人av| 亚洲精品一区二区三区福利| 久久综合色天天久久综合图片| 色88888久久久久久影院按摩| 麻豆入口视频在线观看| 国产污视频在线观看| 国产精品高潮呻吟AV无码| 国产视频每日更新| 男男电影完整版在线观看| 欧美国产中文字幕| 亚洲综合免费观看高清在线观看| 亚洲成a人v欧美综合天堂| 欧美高清另类hdvideosexjaⅴ| 五月天久久综合网| 欧美久久婷婷综合色| 加勒比综合在线| 国产精品久久精品视| 欧美少妇性性性| 中文字幕777| 亚洲人成毛片在线播放女女| 国产精品久久久久久中文字| 欧美一区二区三区色| 国产美女高潮久久白浆| 成人免费一区二区三区牛牛| 九色porny视频在线观看| 亚洲色图另类专区| 可以看毛片的网址| 欧美日韩一卡二卡| 亚洲毛片在线免费观看| 成年人视频网址| 日本精品一区二区三区四区的功能| 午夜视频在线播放| 写真片福利在线播放| 另类中文字幕国产精品| 国产精品美女一区二区三区四区| 人妻中文字幕一区二区三区| 国产一卡二卡3卡4卡四卡在线| 欧美国产一区二区三区激情无套| 久久精品夜色噜噜亚洲aⅴ| 欧美香蕉爽爽人人爽| 亚洲视频在线观看不卡| 久久93精品国产91久久综合| 国产亚洲成aⅴ人片在线观看| 日韩影院精彩在线| 在线欧美亚洲| 中文字幕免费高清| 国产探花在线精品一区二区| 欧美日韩一区不卡| 亚洲伊人成综合成人网| 久久精品国产v日韩v亚洲| 一区二区三区免费在线观看| 日韩三级免费| 丰满的亚洲女人毛茸茸| 国产欧美精品在线观看| 在线观看视频在线观看| 日韩a∨精品日韩在线观看| 台湾佬成人中文网222vvv| 久88久久88久久久| 亚洲mv大片欧洲mv大片| 久草在线青青草| 国产最新精品视频| 亚洲第一区在线| **毛片在线网站| 91麻豆精品视频| 国产wwwwxxxx| 国产一区二区欧美日韩| 9i看片成人免费看片| 91精品啪在线观看国产爱臀| 国产国语**毛片高清视频| 成人免费看视频| 欲求不满中文字幕| 97色在线视频| 网站在线你懂的| 亚洲精品专区| 亚洲国内高清视频| 高清精品一区二区三区一区|