import * as MediaLibrary from "expo-media-library"; import * as FileSystem from "expo-file-system"; import Toast from "react-native-toast-message"; import * as ImageManipulator from "expo-image-manipulator"; export default async function saveImage(uri) { const permission = await MediaLibrary.requestPermissionsAsync(); if (permission.granted) { const timestamp = new Date().getTime(); const fileUri = FileSystem.cacheDirectory + `${timestamp}.png`; try { const manipResult = await ImageManipulator.manipulateAsync(uri, [], { base64: true, }); const base64Code = manipResult.base64; await FileSystem.writeAsStringAsync(fileUri, base64Code, { encoding: FileSystem.EncodingType.Base64, }); await MediaLibrary.saveToLibraryAsync(fileUri); Toast.show({ type: "success", text1: "已保存到相册", topOffset: 60, }); return true; } catch (err) { console.error("FS Err: ", err); return false; } } else { Toast.show({ type: "error", text1: "保存失败,请检查APP媒体权限", topOffset: 60, }); return false; } }