我已经使用了react-native-image-picker,现在我从照片库中选择图像。要将图像发送到 API,我必须首先将其转换为 Base64,然后转换为字节数组。我的文件路径位于response.uri 中。我该怎么做?
当我执行 console.log(response) 时,我得到了这个结果
'Response = ', {
fileSize: 6581432,
longitude: -17.548928333333333,
uri: 'file:///Users/shubhamb/Library/Developer/CoreSimulator/Devices/B58314DF-F0A9-48D2-B68A-984A02271B72/data/Containers/Data/Application/63143214-8A03-4AC8-A79C-42EC9B82E841/tmp/2AACBC57-0C07-4C98-985E-154668E6A384.jpg',
fileName: 'IMG_0003.JPG',
latitude: 65.682895,
origURL: 'assets-library://asset/asset.JPG?id=9F983DBA-EC35-42B8-8773-B597CF782EDD&ext=JPG',
type: 'image/jpeg',
height: 2002,
width: 3000,
timestamp: '2012-08-08T18:52:11Z',
isVertical: false,
}
由于您使用的是 react-native-image-picker,它已经在其响应中返回了 Base64 值
ImagePicker.showImagePicker(options, (response) => {
const base64Value = response.data;
});
我在更新应用程序时突然遇到了这个问题。我发现之前的
react-native-image-picker
曾经提供base64作为response.data。但现在 options 对象中有一个 includeBase64 ,这样你就可以控制是否需要 Base64 数据。所以我的代码变成了如下所示
captureTradeLicenseImage() {
let options = {
maxHeight: 250,
maxWidth: 350,
includeBase64: true //add this in the option to include base64 value in the response
}
ImagePicker.launchCamera(options, (response) => {
console.log('Response = ', response)
if (response.didCancel) {
console.log('User cancelled image picker')
}
else if (response.error) {
console.log('ImagePicker Error: ', response.error)
}
else if (response.customButton) {
console.log('User tapped custom button: ', response.customButton)
}
else if (response.fileSize > 5242880) {
Alert.alert(
"Nilamhut Say\'s",
"Oops! the photos are too big. Max photo size is 4MB per photo. Please reduce the resolution or file size and retry",
[
{ text: "OK", onPress: () => console.log('ok Pressed') }
],
{ cancelable: false }
)
}
else {
this.setState({tradeLicenseImageData: response.base64}) //access like this
}
})
}
独立的 expo 文件系统包使这一切变得简单:
const base64 = await FileSystem.readAsStringAsync(photo.uri, { encoding: 'base64' });
截至 2019 年 9 月 27 日,此软件包可处理
file://
和 content://
uri 的
我已经太晚了,但如果我可以帮助其他正在寻找如何从图像中获取 base64 数据的人: 在 options 对象中,您必须将 base64 选项设置为 true,如下所示:
const options = {
title: 'Choose an Image',
base64: true
};
ImagePicker.launchImageLibrary(options, response => {
console.log(response.data);
});
就这么简单:
import { CameraOptions, ImagePickerResponse, launchCamera } from 'react-native-image-picker';
Wrap in your component:
const [b64, setB64] = useState<string>("");
const manageImage = async (response: ImagePickerResponse) => {
if (response.didCancel) {
return;
} else if (response.assets) {
if (response.assets?.length > 0) {
setB64(response.assets[0].base64 ? response.assets[0].base64 : "");
}
}
}
launchCamera(options, (response) => {
manageImage(response);
});
包括
includeBase64: true
在选项中确实为我返回了base64字符串。
使用react-native-image-picker通过相机点击将图像转换为压缩尺寸的base64格式
启动相机( { 媒体类型:'照片', includeBase64:正确, 质量:1、 最大宽度:150, 最大高度:150, }, 异步(响应:ImagePickerResponse)=> { if (!response.didCancel && !response.errorCode) { 如果 ( !response.didCancel && !response.errorCode && 响应.资产?.长度 ){ const base64String =
data:${response.assets[0].type};base64,${response.assets[0].base64}
;
setProfileIcon(base64String);
}
}
},
);
用于使用react-native-image-picker从图库中进行选择,将图像转换为压缩尺寸的base64格式
const image =等待ImagePicker.openPicker({ 宽度:100, 高度:100, 裁剪:真实, CropperCircleOverlay:真, 压缩图像质量:0.8, 媒体类型:'照片', includeBase64:正确, }); setProfileIcon(
data:${image.mime};base64,${image.data}
);