Javascript 将图像URL转换为base64
我从Facebook graph API中提取了一张照片,我正试图将其上传到我的数据库中,但我必须首先将其转换为base 64。我如何在angularJS或Javascript中实现这一点。我试着用图书馆,但没用Javascript 将图像URL转换为base64,javascript,angularjs,base64,Javascript,Angularjs,Base64,我从Facebook graph API中提取了一张照片,我正试图将其上传到我的数据库中,但我必须首先将其转换为base 64。我如何在angularJS或Javascript中实现这一点。我试着用图书馆,但没用 $scope.prof_pic_link = $base64.encode(data.picture.data.url); $scope.prof_pic_link = encodeURIComponent($scope.prof_pic_link); 我使用了以下函数对
$scope.prof_pic_link = $base64.encode(data.picture.data.url);
$scope.prof_pic_link = encodeURIComponent($scope.prof_pic_link);
我使用了以下函数对二进制数据进行编码:
var base64_encode = function (data) {
// discuss at: http://phpjs.org/functions/base64_encode/
// original by: Tyler Akins (http://rumkin.com)
// improved by: Bayron Guevara
// improved by: Thunder.m
// improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// improved by: Rafał Kukawski (http://kukawski.pl)
// bugfixed by: Pellentesque Malesuada
// example 1: base64_encode('Kevin van Zonneveld');
// returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
// example 2: base64_encode('a');
// returns 2: 'YQ=='
var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
ac = 0,
enc = '',
tmp_arr = [];
if (!data) {
return data;
}
do { // pack three octets into four hexets
o1 = data.charCodeAt(i++);
o2 = data.charCodeAt(i++);
o3 = data.charCodeAt(i++);
bits = o1 << 16 | o2 << 8 | o3;
h1 = bits >> 18 & 0x3f;
h2 = bits >> 12 & 0x3f;
h3 = bits >> 6 & 0x3f;
h4 = bits & 0x3f;
// use hexets to index into b64, and append result to encoded string
tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
} while (i < data.length);
enc = tmp_arr.join('');
var r = data.length % 3;
return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3);
}
var base64\u encode=函数(数据){
//讨论地点:http://phpjs.org/functions/base64_encode/
//原创:泰勒·艾金斯(http://rumkin.com)
//改进者:贝隆·格瓦拉
//改进者:Thunder.m
//改进者:凯文·范·佐内维尔德(http://kevin.vanzonneveld.net)
//改进者:凯文·范·佐内维尔德(http://kevin.vanzonneveld.net)
//改进者:拉法库卡夫斯基(http://kukawski.pl)
//修正者:佩伦茨克·马莱苏亚达
//示例1:base64_编码(“Kevin van Zonneveld”);
//返回1:'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
//示例2:base64_编码('a');
//返回2:'YQ=='
变量b64='ABCDEFGHIJKLMNOPQRSTUVXYZABCDFGHIJKLMNOPQRSTUVXYZ0123456789+/=';
var o1,o2,o3,h1,h2,h3,h4,位,i=0,
ac=0,
附件=“”,
tmp_arr=[];
如果(!数据){
返回数据;
}
把三个八位组分成四个六位组
o1=data.charCodeAt(i++);
o2=data.charCodeAt(i++);
o3=data.charCodeAt(i++);
位=o18&0x3f;
h2=位>>12&0x3f;
h3=位>>6&0x3f;
h4=位&0x3f;
//使用hexets索引到b64中,并将结果附加到编码字符串中
tmp_arr[ac++]=b64.charAt(h1)+b64.charAt(h2)+b64.charAt(h3)+b64.charAt(h4);
}而(i
试着检查一下:实际上,graph API是这样做的。因此,您只需要在@Grald link中发布canvas方法,将imagecrossorigin
属性设置为“匿名”
。(但对IE不起作用)。这将对url进行编码,(http://example.com/image.png
->AHR0CDOVL2V4YW1WBGUY29TL2LTYWDLLNBUZW==
这在btoa()
中很容易实现。你如何对图像进行编码?(提示,)base64转换图像的dataUrl是图像数据的base64值和数据:image/png,base64;“头的组合。您的解决方案只是重写atob方法,如果您只有图像url,则该方法无效。请查看此演示。它从相机中获取图像,保存到画布,并将其转换为base64,但它根本不回答OP的问题。另外,canvas已经有了一个toBlob方法,看起来您真的很想重写我们自己已经存在的方法:)在哪个浏览器中已经存在的方法?并非所有浏览器都支持btoa()和atob()。如果所有浏览器都支持这一点,则不会出现任何多边形填充