<i id='nrxje'><tr id='nrxje'><dt id='nrxje'><q id='nrxje'><span id='nrxje'><b id='nrxje'><form id='nrxje'><ins id='nrxje'></ins><ul id='nrxje'></ul><sub id='nrxje'></sub></form><legend id='nrxje'></legend><bdo id='nrxje'><pre id='nrxje'><center id='nrxje'></center></pre></bdo></b><th id='nrxje'></th></span></q></dt></tr></i><div id='nrxje'><tfoot id='nrxje'></tfoot><dl id='nrxje'><fieldset id='nrxje'></fieldset></dl></div>
        <legend id='nrxje'><style id='nrxje'><dir id='nrxje'><q id='nrxje'></q></dir></style></legend>

        <small id='nrxje'></small><noframes id='nrxje'>

        <tfoot id='nrxje'></tfoot>

        • <bdo id='nrxje'></bdo><ul id='nrxje'></ul>

        如何将图像从 expo-image-picker 保存到 expo-file-system 然后渲染它?

        时间:2023-11-29

          <legend id='rf3Oi'><style id='rf3Oi'><dir id='rf3Oi'><q id='rf3Oi'></q></dir></style></legend>

        1. <i id='rf3Oi'><tr id='rf3Oi'><dt id='rf3Oi'><q id='rf3Oi'><span id='rf3Oi'><b id='rf3Oi'><form id='rf3Oi'><ins id='rf3Oi'></ins><ul id='rf3Oi'></ul><sub id='rf3Oi'></sub></form><legend id='rf3Oi'></legend><bdo id='rf3Oi'><pre id='rf3Oi'><center id='rf3Oi'></center></pre></bdo></b><th id='rf3Oi'></th></span></q></dt></tr></i><div id='rf3Oi'><tfoot id='rf3Oi'></tfoot><dl id='rf3Oi'><fieldset id='rf3Oi'></fieldset></dl></div>
            <tbody id='rf3Oi'></tbody>
        2. <small id='rf3Oi'></small><noframes id='rf3Oi'>

              <tfoot id='rf3Oi'></tfoot>

                <bdo id='rf3Oi'></bdo><ul id='rf3Oi'></ul>
                  本文介绍了如何将图像从 expo-image-picker 保存到 expo-file-system 然后渲染它?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在尝试将选定的图像存储在应用程序中,而不是存储在图像卷中.

                  I am trying to store selected images within the application, as opposed to in the image roll.

                  这是我尝试过的:

                  
                      await FileSystem.downloadAsync(
                        imageUri, // the image uri from expo-image-picker
                        FileSystem.documentDirectory + `${uuid}-image.jpg`
                      )
                        .then(({ uri }) => {
                          console.log("Finished downloading to ", uri);
                        })
                        .catch((error) => {
                          console.error(error);
                        });
                  
                  

                  我收到错误:

                  Unable to download file: Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL"
                  

                  我也试过了:

                      await FileSystem.writeAsStringAsync(
                        FileSystem.documentDirectory + `spotPhotos/${uuid}-image.jpg`,
                        image.base64
                      );
                  

                  当我尝试在 ImageBackground 组件中使用图像时,这似乎成功地保存了图像,但是我没有成功.

                  This seemed to be successful in saving the image, when I tried to use the image in an ImageBackground component, however I was not successful.

                  
                  <ImageBackground
                          source={'data:image/png;base64'+imageFile}
                          style={{ borderRadius: 5, borderColor:  'black', width: 100, flex: 1, resizeMode: "cover", justifyContent: "center" }}
                        >
                  ...
                  </ImageBackground>
                  

                  出现无法读取文件夹的错误:

                  with an error saying the folder could not be read:

                  getFile -> err [Error: File '/var/mobile/Containers/Data/Application/.../spotPhotos' could not be read.]
                  

                  我可以使用 uri 保存图像文件本身吗?我需要将其转换为 base64 并返回吗?

                  Can I save the image file itself using the uri? Do I need to convert it to base64 and back?

                  看来我已经能够成功保存使用以下编码的base64图像了:

                  It seems I have been able to successfully save the image base64 encoded with the following:

                      await FileSystem.writeAsStringAsync(
                        FileSystem.documentDirectory + `spotPhotos/${uuid}-imagelocation.jpg`,
                        image.base64
                      );
                  
                  

                  并通过以下方式访问编码图像:

                  and access the encoded image with:

                   let imageFile = async () => {
                      let uri = FileSystem.documentDirectory + "spotPhotos/" + spot.imageloc;
                      let options = { encoding: FileSystem.EncodingType.Base64 };
                     let base64 =  await FileSystem.readAsStringAsync(uri, options);
                     return (base64);
                    }
                  

                  当我 console.log imageFile 我得到一个巨大的字符墙,然后崩溃 Vscodium,即使我尝试使用 string.prototype.slice() 记录前几个字符,所以我无法检查它,但我认为它是 base64 编码文件.

                  When I console.log imageFile I get a huge wall of characters, which then crashes Vscodium, even when I try to just log the first few characters with string.prototype.slice(), so I havn't been able to inspect it, but I take that to be the base64 encoded file.

                  当我尝试将返回的值引用为 Image 或 ImageBackground 组件的来源时:

                  When I try to reference the returned value as the source of an Image or ImageBackground component like so:

                  <Image style={{width: 50, height: 50}} source={{imageFile}}/>
                  // or 
                  
                  <Image style={{width: 50, height: 50}} source={{imageFile()}}/>
                  
                  // or 
                  
                  <Image style={{width: 50, height: 50}} source={{uri:`data:image/png;base64,${imageFile}`}}/>
                  // or 
                  
                  <Image style={{width: 50, height: 50}} source={{uri:`data:image/jpg;base64,${imageFile}`}}/>
                  
                  

                  我收到警告消息:invalid prop 'source' provided to 'Image'.

                  我也收到一条错误消息

                  Error: You attempted to set the key `_65` with the value of 1 on an object 
                  that is meant to be immutable and has been frozen.
                  

                  由于这篇文章中的建议不起作用,我的问题可能与我从文件.

                  Since the suggestion in this post doesn't work, my issue may be with the data I am pulling from the file.

                  在 expo-file-system 中存储和访问 jpg 文件的正确 api 用法是什么?

                  推荐答案

                  我用下面的代码搞定了这个:

                  I got this working with the following code:

                  useEffect(() => {
                      if (data[spotIndex].image) {
                        imageFile();
                      }
                    }, [location]);
                  
                    let imageFile = async () => {
                      if (data[spotIndex].image.length > 0) {
                        let uri = FileSystem.documentDirectory + data[spotIndex].image;
                        let getInfo = await FileSystem.getInfoAsync(uri);
                        getInfo && console.log(getInfo);
                        let options = { encoding: FileSystem.EncodingType.Base64 };
                        let base64 = await FileSystem.readAsStringAsync(uri, options);
                        setBase64Val("data:image/jpeg;base64," + base64);
                      }
                    };
                  
                  

                  <ImageBackground source={{ uri: base64Val }}>
                  
                  

                  这篇关于如何将图像从 expo-image-picker 保存到 expo-file-system 然后渲染它?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:Expo + React Native:在两种视图的坐标之间画线 下一篇:使用 console.log 记录反应本机事件未触发并最终使应用程序崩溃

                  相关文章

                    <small id='bizcs'></small><noframes id='bizcs'>

                    <tfoot id='bizcs'></tfoot>
                    • <bdo id='bizcs'></bdo><ul id='bizcs'></ul>
                  1. <i id='bizcs'><tr id='bizcs'><dt id='bizcs'><q id='bizcs'><span id='bizcs'><b id='bizcs'><form id='bizcs'><ins id='bizcs'></ins><ul id='bizcs'></ul><sub id='bizcs'></sub></form><legend id='bizcs'></legend><bdo id='bizcs'><pre id='bizcs'><center id='bizcs'></center></pre></bdo></b><th id='bizcs'></th></span></q></dt></tr></i><div id='bizcs'><tfoot id='bizcs'></tfoot><dl id='bizcs'><fieldset id='bizcs'></fieldset></dl></div>

                    1. <legend id='bizcs'><style id='bizcs'><dir id='bizcs'><q id='bizcs'></q></dir></style></legend>