現(xiàn)在場景是這樣,我們有一個網(wǎng)站,需要用戶選擇圖片文件,然后和我們的背景、提示信息合成為一張新的圖片,然后導(dǎo)出。
在本地是可以運行的
在線上測試的時候報錯,提示畫布是被污染的,安全限制不能導(dǎo)出為圖片。
// 錯誤提示:
Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
at HTMLImageElement.img_2.onload
我在網(wǎng)上找了一些相關(guān)的資料,大部分做法是給 img 標(biāo)簽加一個屬性。
var img = new Image()
img.setAttribute("crossOrigin",'anonymous')
// img.crossOrigin = "anonymous"
// 還有的博客說這樣加
img.crossOrigin = ""
img.crossOrigin = "*"
// 但是我試了都沒有效果,還是報錯
這里我有些不太清楚, crossOrigin 屬性是給導(dǎo)出的 new Image() 加,還是給用戶選擇的跨域圖片添加?
我們的 dev 環(huán)境是可以運行的,但是線上卻報錯,服務(wù)器方面有哪些配置會導(dǎo)致這個問題嗎?
求解
再附一些相關(guān)的博客,
https://www.jianshu.com/p/6fe...
跨域請求保護,如果用戶是本地上傳的圖片到你們的服務(wù)器,就不會存在這個問題,但是假如用戶使用的是網(wǎng)絡(luò)上的資源,就會有這種問題出現(xiàn),比如阿里云、騰訊云、微信頭像等等CDN圖片,這種問題純客戶端JS是沒辦法的,需要把圖片地址發(fā)給服務(wù)端,讓服務(wù)端將圖片轉(zhuǎn)成base64格式發(fā)給前端才能解決。
簡單附錄PHP獲取圖片轉(zhuǎn)成base64代碼(個人學(xué)習(xí)時使用):
function imgcurl($ul){
$header = array(
'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding: gzip, deflate',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $ul);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_ENCODING, 'gzip');
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
$data = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($code == 200) {
$imgBase64Code = "data:image/jpeg;base64," . base64_encode($data);
};
return $imgBase64Code;
}北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。