我使用React Native 和 Expo在手機和平??板電腦上開發應用程式。我需要能夠拍照并將其保存到我的本地 SQLite 資料庫中。我設法拍下照片并保存,然后將其顯示在頁面上。我使用expo-camera。
IOS 一切正常。但是,影像在 Android 上已損壞。我的影像保存在 base64 中。我在 android 和 IOS 上添加了兩個指向結果的鏈接。
IOS版 安卓版
到 base64 的轉換發生在__takePicture中此摘錄的末尾:
const [startCamera, setStartCamera] = useState(false);
const [photo, setPhoto] = useState(null);
const [zoom, setZoom] = useState(0);
const [hasPermission, setHasPermission] = useState(null);
const [type, setType] = useState(CameraType.back);
const [camera, setCamera] = useState(null);
useEffect(() => {
(async () => {
const { status } = await Camera.requestCameraPermissionsAsync();
setHasPermission(status === 'granted');
})();
}, []);
useEffect(() => {
__startCamera(props.startCamera);
}), [startCamera, props.startCamera];
const __startCamera = async (props) => {
const { status } = await Camera.requestCameraPermissionsAsync();
if (status === "granted") {
setStartCamera(props);
} else {
Alert.alert("Action impossible", "Demande d'accès");
}
};
const __takePicture = async () => {
if (!camera) return;
const photo = await camera.takePictureAsync({ base64: true });
setPhoto(photo);
const manipResult = await manipulateAsync(photo.uri, [], {
compress: 0,
format: SaveFormat.JPEG,
base64: true,
});
setPhoto(manipResult);
};
圖片展示:
<Image
source={{ uri: photo.uri }}
resizeMode="cover"
style={{
width: "80%",
height: "80%",
backgroundColor: "black",
borderWidth: 5,
borderRadius: 10,
}}
/>
你知道問題出在哪里嗎?感謝您的時間。
uj5u.com熱心網友回復:
Timotius 從對我有用的 Discord Reactiflux 服務器提供的答案:更改compress: 0為compress: 1
他從他們的檔案中帶回的另一個可能被證明有用的元素:“SaveFormat.PNG 壓縮是無損的但速度較慢,SaveFormat.JPEG 更快但影像有可見的偽影。默認為 SaveFormat.JPEG”
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/506976.html
