React-Native: преобразовать URL-адрес изображения в строку base64

Я создаю ответное родное приложение, которое должно хранить изображения в формате base64 для автономных функций просмотра.

Какая библиотека/функция даст мне лучший результат для хранения изображения в виде строки base64? предполагая, что мой url "http://www.example.com/image.png".

Кроме того, мне нужно сделать http-запрос, чтобы получить его, прежде чем хранить его в виде строки? моя логика говорит "да", но в ответе native вы можете загружать изображения в компонент "lt > Image" без запроса их сначала с сервера.

Каким будет лучший способ сделать это в ответном нативном?

Ответы

Ответ 1

Я использую response-native-fetch-blob, в основном он предоставляет множество файловой системы, а сетевые функции упрощают передачу данных.

import RNFetchBlob from "react-native-fetch-blob";
const fs = RNFetchBlob.fs;
let imagePath = null;
RNFetchBlob.config({
  fileCache: true
})
  .fetch("GET", "http://www.example.com/image.png")
  // the image is now dowloaded to device storage
  .then(resp => {
    // the image path you can use it directly with Image component
    imagePath = resp.path();
    return resp.readFile("base64");
  })
  .then(base64Data => {
    // here base64 encoded image
    console.log(base64Data);
    // remove the file from storage
    return fs.unlink(imagePath);
  });

источник Project Wiki

Ответ 2

 ImageEditor.cropImage(imageUrl, imageSize, (imageURI) => {
      ImageStore.getBase64ForTag(imageURI, (base64Data) => {
          // base64Data contains the base64string of the image
      }, (reason) => console.error(reason));
 }, (reason) => console.error(reason));

Ответ 3

Чтобы преобразовать изображение в base64 в React native, полезна утилита FileReader:

const fileReader = new FileReader();
fileReader.onload = fileLoadedEvent => {
  const base64Image = fileLoadedEvent.target.result;
};
fileReader.readAsDataURL(imagepath); 

Для этого требуется реакция-собственный файл.

Другой альтернативой, и, вероятно, предпочтительной альтернативой, является использование NativeModules. Средняя статья показывает, как. Требуется создать собственный модуль.

NativeModules.ReadImageData.readImage(path, (base64Image) => {
  // Do something here.
});

Ответ 4

Существует лучший способ: Установите этот response-native-fs, ЕСЛИ у вас его еще нет.

import RNFS from 'react-native-fs';

RNFS.readFile(this.state.imagePath, 'base64')
.then(res =>{
  console.log(res);
});

Ответ 6

response-native-image-picker включает узел данных base64 в возвращаемый объект. FYI