我正在使用react-native对ios进行一些图像处理。
问题是我使用的库之一只支持绝对路径,但我只有文件资产uri。
实施例
我有:
assets-library://asset/asset.HEIC?id=CE542E92-B1FF-42DC-BD89-D61BB70EB4BF&ext=HEIC
我需要:
file:///Users/USERNAME/Library/Developer/CoreSimulator/Devices/########-####-####-####-############/data/Containers/Data/Application/########-####-####-####-############/Documents/########-####-####-####-############.jpg
有没有办法轻松获得图像绝对路径?
答案 0 :(得分:1)
最后,我没有找到一种很好的方法。
我最终使用react-native-fs
copyAssetsFileIOS
将文件复制到应用程序沙盒文档目录,这给了我一个绝对路径目录。
希望对您有所帮助。
答案 1 :(得分:1)
根据@ospfranco的回答,这就是我最终要做的。 我将资产的副本保存在temp文件夹中。还包括一个小片段,用于为文件名生成随机字符串。
import RNFS from 'react-native-fs';
getAssetFileAbsolutePath = async (assetPath) => {
const dest = `${RNFS.TemporaryDirectoryPath}${Math.random().toString(36).substring(7)}.jpg`;
try {
let absolutePath = await RNFS.copyAssetsFileIOS(assetPath, dest, 0, 0);
console.log(absolutePath)
} catch(err) {
console.log(err)
}
}
答案 2 :(得分:1)
我使用 RNFS 让它工作,但我必须在 uri 路径中添加一些“额外”才能让它工作。
<TouchableHighlight
onPress={async () => {
const destPath = RNFS.CachesDirectoryPath + '/MyPic.jpg';
try {
await RNFS.copyAssetsFileIOS(imageUri, destPath, 0, 0);
console.log('destPath', destPath);
} catch (error) {
console.log(error);
}
navigation.navigate('SelectedPicture', {
uri: 'file://' + destPath,
});
}}>
<Image source={{uri: imageUri}} style={styles.image} />
</TouchableHighlight>
答案 3 :(得分:0)
这个问题很老,但是我回答这个问题是为了帮助像我这样的人,在本机反应方面是新手,也遇到同样的问题。 我一直在努力尝试从相机胶卷中获取图像并使用OCR库对其进行处理。我使用react-native-photo-framework来获取图像,发现使用资产的方法getImageMetadata可以获取 fileurl 。我需要此fileurl,因为原始URI的格式为'photo:// ...'未被识别为OCR库的有效URL。我尚未在真实设备和iCloud资产上进行过测试。示例:
const statusObj = await RNPhotosFramework.requestAuthorization()
if (statusObj.isAuthorized) {
const assetList = await RNPhotosFramework.getAssets({
includeMetadata: true,
includeResourcesMetadata: true,
fetchOptions: {
mediaTypes: ['image'],
sourceTypes: ['userLibrary', 'cloudShared', 'itunesSynced'],
}
})
const asset = photos.assets[0]
const metadata = await asset.getImageMetadata()
const uri = metadata.imageMetadata.fileUrl
}