最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript toDataURL圖片轉(zhuǎn)換問題解讀

 更新時間:2023年06月17日 09:38:24   作者:Tornado_Liao  
這篇文章主要介紹了JavaScript toDataURL圖片轉(zhuǎn)換問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

JavaScript toDataURL圖片轉(zhuǎn)換

問題

js業(yè)務(wù)中涉及到圖片轉(zhuǎn)換格式,.在安卓手機(jī)的微信瀏覽器上出現(xiàn)

stack: "Error: Failed to execute ‘toDataURL’ on ‘HTMLCanvasElement’: Tainted canvases may not be exported

最初解決方法(在安卓的微信瀏覽器上有問題)

??? ?let image = new Image();
??? ?image.src = img;
? ? image.setAttribute('crossOrigin', 'anonymous');

最開始使用的這個方法。是將跨域?qū)傩栽O(shè)置為anonymous,然后服務(wù)器的nginx端也添加跨域header=*

但測試時會卡住

最終解決方法

??? ?let image = new Image();
??? ?image.setAttribute('crossOrigin', 'anonymous');
??? ?image.src = img;

調(diào)試了很久發(fā)現(xiàn)將屬性設(shè)置放在圖片的賦值前面就解決問題了

js將圖片轉(zhuǎn)為base64(解決Canvas.toDataURL 圖片跨域問題)

場景一

將項目中的圖片資源轉(zhuǎn)為base64

function convertImgToBase64(url, callback) {
? ? ? ? let canvas = document.createElement('canvas'),
? ? ? ? ctx = canvas.getContext('2d'),
? ? ? ? img = new Image();
? ? ? ? img.crossOrigin = 'anonymous';//解決Canvas.toDataURL 圖片跨域問題
? ? ? ? img.onload = () => {
? ? ? ? ? canvas.height = img.height;
? ? ? ? ? canvas.width = img.width;
? ? ? ? ? ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
? ? ? ? ? let ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase(); // 獲取到圖片的格式
? ? ? ? ? let dataURL = canvas.toDataURL("image/" + ext); // 得到base64 編碼的 dataURL
? ? ? ? ? callback && callback(dataURL);
? ? ? ? ? canvas = null;
? ? ? ? };
? ? ? ? img.src = url;
? ? ? }
var ?baseUrl = ''
convertImgToBase64(this.options.logo, (baseUrl) => {
? ? baseUrl = baseUrl
})

場景二

將用戶本地上傳的資源轉(zhuǎn)化,即用戶通過瀏覽器點(diǎn)擊文件上傳時,將圖片資源轉(zhuǎn)化成base64:

<!DOCTYPE html>
<html>
<head>
? <meta charset="utf-8">
? <meta name="viewport" content="width=device-width,initial-scale=1.0">
? <style>
? </style>
</head>
<body>
? <p><input type="file" id="upfile"></p>
? <p><button id="upJS">用原生JS上傳</button>
? </div>
? <script>
? ? function imgFileTobase64() {
? ? ? var reader = new FileReader();
? ? ? var AllowImgFileSize = 2100000; //上傳圖片最大值(單位字節(jié))( 2 M = 2097152 B )超過2M上傳失敗
? ? ? var file = document.getElementById('upfile').files[0]
? ? ? if (file) {
? ? ? ? //將文件以Data URL形式讀入頁面
? ? ? ? reader.readAsDataURL(file);
? ? ? ? reader.onload = function (e) {
? ? ? ? ? //var ImgFileSize = reader.result.substring(reader.result.indexOf(",") + 1).length;//截取base64碼部分(可選可不選,需要與后臺溝通)
? ? ? ? ? if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {
? ? ? ? ? ? alert('上傳失敗,請上傳不大于2M的圖片!');
? ? ? ? ? ? return;
? ? ? ? ? } else {
? ? ? ? ? ? //執(zhí)行上傳操作
? ? ? ? ? ? alert(reader.result);
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? }
? ? document.getElementById("upJS").onclick = function () {
? ? ? imgFileTobase64()
? ? }
? </script>
</body>
</html>

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JS圖片放大效果簡單實(shí)現(xiàn)代碼

    JS圖片放大效果簡單實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)圖片放大效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 玩轉(zhuǎn)JavaScript函數(shù):apply/call/bind技巧

    玩轉(zhuǎn)JavaScript函數(shù):apply/call/bind技巧

    歡迎來到這篇關(guān)于JavaScript中apply、call、bind函數(shù)的指南,這里充滿了實(shí)用技巧和深入理解,讓你的編程之旅更加游刃有余,趕快翻開這個神秘的“魔法書”,讓我們一起探索吧!
    2024-01-01
  • Electron實(shí)現(xiàn)自定義全量更新的詳細(xì)教程

    Electron實(shí)現(xiàn)自定義全量更新的詳細(xì)教程

    本文主要介紹如何手動實(shí)現(xiàn)客戶端應(yīng)用的自動全量更新,通過改造electron-updater實(shí)現(xiàn)版本,系統(tǒng)等字段的動態(tài)判斷更新,實(shí)現(xiàn)后臺配置不同設(shè)備,版本,系統(tǒng)的版本更新,可自行在后臺配置定向更新,批量更新等,需要的朋友可以參考下
    2025-08-08
  • JavaScript中定義對象原型的兩種使用方法

    JavaScript中定義對象原型的兩種使用方法

    本文主要對JavaScript中定義對象原型的兩種使用方法進(jìn)行介紹,具有很好的參考價值,下面就跟小編一起來看下吧
    2016-12-12
  • 使用HTML+JavaScript實(shí)現(xiàn)SQL智能補(bǔ)全功能

    使用HTML+JavaScript實(shí)現(xiàn)SQL智能補(bǔ)全功能

    現(xiàn)代數(shù)據(jù)庫管理工具中,SQL 智能補(bǔ)全功能已成為提升開發(fā)效率的重要特性,它能夠根據(jù)上下文環(huán)境自動提示關(guān)鍵詞、表名、字段名等信息,大大減少了手動輸入錯誤和查詢文檔的時間,本文將介紹如何使用HTML、CSS和JavaScript實(shí)現(xiàn)SQL智能補(bǔ)全功能,需要的朋友可以參考下
    2026-03-03
  • JavaScript中變量提升和函數(shù)提升的詳解

    JavaScript中變量提升和函數(shù)提升的詳解

    這篇文章主要介紹了JavaScript中變量提升和函數(shù)提升的詳解,文章通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • javascript觸發(fā)模擬鼠標(biāo)點(diǎn)擊事件

    javascript觸發(fā)模擬鼠標(biāo)點(diǎn)擊事件

    這篇文章主要介紹了javascript觸發(fā)模擬鼠標(biāo)點(diǎn)擊事件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-06-06
  • MutationObserver監(jiān)視對DOM?樹所做更改的功能妙用

    MutationObserver監(jiān)視對DOM?樹所做更改的功能妙用

    這篇文章主要為大家介紹了MutationObserver監(jiān)視對DOM?樹所做更改的功能妙用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • JavaScript中map屬性示例詳解

    JavaScript中map屬性示例詳解

    Map對象在JavaScript中提供了一種靈活且高效的鍵值對存儲方式,它具有許多實(shí)用的方法,如set()、get()、has()和delete()等,使得操作和管理鍵值對變得更加簡單,這篇文章主要介紹了JS中map屬性,需要的朋友可以參考下
    2024-08-08
  • 仿Google和Windows Live的拖拽

    仿Google和Windows Live的拖拽

    仿Google和Windows Live的拖拽...
    2006-11-11

最新評論

凤台县| 阿荣旗| 鲁甸县| 七台河市| 中超| 林西县| 昌平区| 荥阳市| 克拉玛依市| 长丰县| 防城港市| 浮山县| 平和县| 新乡县| 怀化市| 克东县| 德惠市| 公主岭市| 屏东县| 土默特右旗| 林芝县| 腾冲县| 土默特右旗| 宜春市| 五大连池市| 高密市| 瑞昌市| 上栗县| 房山区| 兴文县| 汉中市| 招远市| 稻城县| 濉溪县| 崇阳县| 邯郸市| 江门市| 米脂县| 汽车| 太谷县| 静安区|