2017-06-11 4 views
2

Je travaille sur une réaction application iOS native où je veux prendre certaines images d'un appareil photo de l'utilisateur rouleau et les enregistrer dans le stockage en nuage (je suis en ce moment en utilisant Firebase).React vitesse native jusqu'à convertir l'image uri base64

Je récupère actuellement les images de la pellicule et afin de sauvegarder chaque image dans le nuage, je convertis chaque image uri en base64 puis en blob en utilisant la bibliothèque react-native-fetch-blob. Bien que cela travaille je trouve le processus de conversion en base64 pour chaque image à prendre très longtemps.

Une image par exemple de l'appareil photo rouleau: enter image description here

Quelle serait la plus efficace/moyen le plus rapide de prendre l'image uri pour chaque image de la caméra de rouleau, le convertir et le stocker dans le cloud espace de rangement. Y at-il une meilleure façon que je peux être la manipulation de ce? L'utilisation de Web Workers accélérerait-elle le processus de conversion en base64?

Mon actuel processus de conversion d'image:

import RNFetchBlob from 'react-native-fetch-blob'; 
const Blob = RNFetchBlob.polyfill.Blob; 
const fs = RNFetchBlob.fs 
window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest 
window.Blob = Blob 

function saveImages(images) { 
    let blobs = await Promise.all(images.map(async asset => { 
     let response = await convertImageToBlob(asset.node.image.uri); 
     return response; 
    })); 

    // I will then send the array of blobs to Firebase storage 
} 


function convertImageToBlob(uri, mime = 'image/jpg') { 
    const uploadUri = uri.replace('file://', ''); 

    return new Promise(async (resolve, reject) => { 
     let data = await readStream(uploadUri); 
     let blob = await Blob.build(data, { type: `${mime};BASE64` }); 
     resolve(blob); 
    }) 
} 

function readStream(uri) { 
    return new Promise(async (resolve, reject) => { 
     let response = await fs.readFile(uri, 'base64'); 
     resolve(response); 
    }) 
} 
+0

pourquoi avez-vous besoin même le base64? Vous devriez être capable d'aller lire un périphérique -> blob. – codeisforeva

Répondre

0

j'ai trouvé très utile la solution ci-dessous pour accélérer le processus. La conversion base64 prend maintenant place sur le côté natif plutôt que par JS.

React Native: Creating a custom module to upload camera roll images.

Il est également intéressant de noter cela va convertir l'image en miniature résolution.

Pour convertir une image à la solution de suivi complète résolution guillaumepiot ici: https://github.com/scottdixon/react-native-upload-from-camera-roll/issues/1