博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片转成base64 跨域等安全限制及解决方案
阅读量:4664 次
发布时间:2019-06-09

本文共 1897 字,大约阅读时间需要 6 分钟。

 把其他域的图片在canvas中转换为base64时,会遇到跨域安全限制。

目前,唯一可行的方案是,把图片文件以arraybuffer的形式ajax下载下来,然后直接转base4。

但是,这样有个毛病,就是可能会浪费带宽,多下载一次。

/*    var getBase64ByUrl = function(src, callback, outputFormat) {        var canvas = document.createElement('canvas'),            ctx = canvas.getContext('2d'),            img = new Image;        img.crossOrigin = 'Anonymous';        img.onload = function() {            canvas.height = img.height;            canvas.width = img.width;            ctx.drawImage(img, 0, 0); //默认图片文件的原始size 缩小base串需加第4、5个参数            alert(5)            try{var dataURL = canvas.toDataURL(outputFormat || 'image/png');            } catch(e) { alert(e.name + ": " + e.message);                alert(JSON.stringify(e));            }            dataURL =dataURL.replace("data:image/png;base64,", "");            //dataURL =encodeURIComponent(dataURL);            alert(dataURL);            callback(dataURL);            canvas = null;        };        img.src = src;alert(6.5)    }*/var getBase64ByUrl = function(src, callback, outputFormat) {      var xhr = new XMLHttpRequest();      xhr.open('GET', src, true);      xhr.responseType = 'arraybuffer';      xhr.onload = function(e) {        if (xhr.status == 200) {          var uInt8Array = new Uint8Array(xhr.response);          var i = uInt8Array.length;          var binaryString = new Array(i);          while (i--) {            binaryString[i] = String.fromCharCode(uInt8Array[i]);          }          var data = binaryString.join('');          var base64 = window.btoa(data);          var dataUrl = "data:" + (outputFormat || "image/png") + ";base64," + base64;          alert(dataUrl)          callback.call(this, dataUrl);        }      };      xhr.send();    }

 

参考

http://stackoverflow.com/questions/22783368/android-browser-only-canvas-todataurl-throws-uncaught-error-securityerror-dom

转载于:https://www.cnblogs.com/youryida/p/4914503.html

你可能感兴趣的文章
hdu 3007【最小圆覆盖-随机增量法模板】
查看>>
10.15作业
查看>>
angularJs实现修改功能
查看>>
网络流二十四题之假期的宿舍
查看>>
ASP.NET MVC5(二):控制器、视图与模型
查看>>
眼高手低,你有这个毛病吗?
查看>>
[BZOJ 1733] [Usaco2005 feb] Secret Milking Machine 【二分 + 最大流】
查看>>
oracle (7) Chapter 8 Oracle体系和其他对象
查看>>
C#网络爬虫抓取小说
查看>>
一指流沙,倾覆了谁的年华?
查看>>
SQL Server 2005/2008 触发器的管理和查看
查看>>
java与c#的语法对比
查看>>
Set接口——LinkedHashSet集合
查看>>
jquery 实现 点击一个按钮添加多个div
查看>>
JavaWeb服务安全模块xmind
查看>>
个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第4波-一大波自定义函数高级应用,重新定义Excel函数的学习和使用方法...
查看>>
秒懂机器学习---梯度下降简单实例
查看>>
Catalan数(卡特兰数)
查看>>
第二百八十七节,MySQL数据库-条件语句、循环语句、动态执行SQL语句
查看>>
centos7配置笔记
查看>>