Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将图像转换为base64 React Native_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 如何将图像转换为base64 React Native

Javascript 如何将图像转换为base64 React Native,javascript,reactjs,react-native,Javascript,Reactjs,React Native,您能否建议我使用任何库或其他工具将此图像转换为base64的最佳方法: 我第一次认为atributte数据是base64,但我使用了以下功能: function isBase64(str) { if (str ==='' || str.trim() ===''){ return false; } try { return btoa(atob(str)) == str; } catch (err) { return false; }} 因此,当我引入属性data时,如果您愿意,

您能否建议我使用任何库或其他工具将此图像转换为base64的最佳方法:

我第一次认为atributte
数据是base64,但我使用了以下功能:

function isBase64(str) {
if (str ==='' || str.trim() ===''){ return false; }
try {
    return btoa(atob(str)) == str;
} catch (err) {
    return false;
}}

因此,当我引入属性
data
时,如果您愿意,此函数将返回我
false

。您可以复制下面的代码,并使用这些方法

const chars =
  'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

const Base64 = {
  btoa: (input = '') => {
    let str = input;
    let output = '';

    for (
      let block = 0, charCode, i = 0, map = chars;
      str.charAt(i | 0) || ((map = '='), i % 1);
      output += map.charAt(63 & (block >> (8 - (i % 1) * 8)))
    ) {
      charCode = str.charCodeAt((i += 3 / 4));

      if (charCode > 0xff) {
        throw new Error(
          "'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.",
        );
      }

      block = (block << 8) | charCode;
    }

    return output;
  },

  atob: (input = '') => {
    let str = input.replace(/[=]+$/, '');
    let output = '';

    if (str.length % 4 == 1) {
      throw new Error(
        "'atob' failed: The string to be decoded is not correctly encoded.",
      );
    }
    for (
      let bc = 0, bs = 0, buffer, i = 0;
      (buffer = str.charAt(i++));
      ~buffer && ((bs = bc % 4 ? bs * 64 + buffer : buffer), bc++ % 4)
        ? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6))))
        : 0
    ) {
      buffer = chars.indexOf(buffer);
    }

    return output;
  },
};

export default Base64;
常量字符=
‘ABCDEFGHIjklmnopqrstuvwxyzabCDEFGHIjklmnopqrstuvxyz012456789+/=’;
常量Base64={
btoa:(输入=“”)=>{
设str=input;
让输出=“”;
为了(
设block=0,charCode,i=0,map=chars;
str.charAt(i | 0)| |((map='='),i%1);
输出+=映射字符(63&(块>>(8-(i%1)*8)))
) {
charCode=str.charCodeAt((i+=3/4));
如果(字符码>0xff){
抛出新错误(
“'btoa'失败:要编码的字符串包含拉丁1范围以外的字符。”,
);
}
块=(块{
让str=input.replace(/[=]+$/,“”);
让输出=“”;
如果(str.length%4==1){
抛出新错误(
“'atob'失败:要解码的字符串编码不正确。”,
);
}
为了(
设bc=0,bs=0,buffer,i=0;
(buffer=str.charAt(i++);
~buffer&(bs=bc%4?bs*64+buffer:buffer),bc++%4)
?(输出+=String.fromCharCode(255&(bs>>(-2*bc)和6)))
: 0
) {
缓冲区=字符索引(缓冲区);
}
返回输出;
},
};
导出默认Base64;

如果您愿意。您可以复制下面的代码,并使用这些方法

const chars =
  'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

const Base64 = {
  btoa: (input = '') => {
    let str = input;
    let output = '';

    for (
      let block = 0, charCode, i = 0, map = chars;
      str.charAt(i | 0) || ((map = '='), i % 1);
      output += map.charAt(63 & (block >> (8 - (i % 1) * 8)))
    ) {
      charCode = str.charCodeAt((i += 3 / 4));

      if (charCode > 0xff) {
        throw new Error(
          "'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.",
        );
      }

      block = (block << 8) | charCode;
    }

    return output;
  },

  atob: (input = '') => {
    let str = input.replace(/[=]+$/, '');
    let output = '';

    if (str.length % 4 == 1) {
      throw new Error(
        "'atob' failed: The string to be decoded is not correctly encoded.",
      );
    }
    for (
      let bc = 0, bs = 0, buffer, i = 0;
      (buffer = str.charAt(i++));
      ~buffer && ((bs = bc % 4 ? bs * 64 + buffer : buffer), bc++ % 4)
        ? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6))))
        : 0
    ) {
      buffer = chars.indexOf(buffer);
    }

    return output;
  },
};

export default Base64;
常量字符=
‘ABCDEFGHIjklmnopqrstuvwxyzabCDEFGHIjklmnopqrstuvxyz012456789+/=’;
常量Base64={
btoa:(输入=“”)=>{
设str=input;
让输出=“”;
为了(
设block=0,charCode,i=0,map=chars;
str.charAt(i | 0)| |((map='='),i%1);
输出+=映射字符(63&(块>>(8-(i%1)*8)))
) {
charCode=str.charCodeAt((i+=3/4));
如果(字符码>0xff){
抛出新错误(
“'btoa'失败:要编码的字符串包含拉丁1范围以外的字符。”,
);
}
块=(块{
让str=input.replace(/[=]+$/,“”);
让输出=“”;
如果(str.length%4==1){
抛出新错误(
“'atob'失败:要解码的字符串编码不正确。”,
);
}
为了(
设bc=0,bs=0,buffer,i=0;
(buffer=str.charAt(i++);
~buffer&(bs=bc%4?bs*64+buffer:buffer),bc++%4)
?(输出+=String.fromCharCode(255&(bs>>(-2*bc)和6)))
: 0
) {
缓冲区=字符索引(缓冲区);
}
返回输出;
},
};
导出默认Base64;

看起来它已经是base64了,这不太好,因为这是对存储、带宽、CPU和内存的浪费。使用base64编码几乎没有实际原因。看起来它已经是base64了,这不太好,因为这是对存储、带宽、CPU和内存的浪费。使用base64的实际原因很少编码。