我正在从图库中选择照片并上传到服务器但是几天后我注意到有些照片有扩展名,浏览器无法呈现这些图像。
1.有没有办法从上传的heic中提取照片?
2.如何反应原生我可以从这种格式获得jpeg?
答案 0 :(得分:8)
你可以在服务器端转换它,借助这个很棒的lib Tifig 。
https://github.com/monostream/tifig
您还可以使用https://cloudconvert.com/formats/image/heic之类的API在服务器端或移动设备(客户端)进行转换。
答案 1 :(得分:0)
我假设您正在使用react-native-image-picker,这是社区库,也是使用最多的图书馆。
实际上不需要安装其他模块,只是总是从响应中获取uri
并更新文件名,以防出现 heic 映像。代码示例:
const options = {
title: 'Select Avatar',
storageOptions: {
skipBackup: true,
path: 'images'
},
noData: true,
quality: 1,
mediaType: 'photo'
};
ImagePicker.showImagePicker(options, imgResponse => {
this.setState({ imageLoading: true, avatarMediaId: null });
if ((imgResponse.didCancel) || (imgResponse.error)) {
this.setState({ imageLoading: false });
} else {
let source = {};
let fileName = imgResponse.fileName;
if (Platform.OS === 'ios' && (fileName.endsWith('.heic') || fileName.endsWith('.HEIC'))) {
fileName = `${fileName.split(".")[0]}.JPG`;
}
source = { uri: imgResponse.uri, fileName };
this.uploadImage(source);
}
});
答案 2 :(得分:0)
这是我的解决方案:我正在使用 react-native-image-crop-picker。
就我而言,如果文件名是 .HEIC,服务器不接受,告诉我使用 .png 或 .jpg
所以我只是:
image.filename.replace(/HEIC/g, 'jpg')
给你一个完整的图片:
const formData = new FormData();
formData.append('file', {
uri: image.path,
name: image.filename.replace(/HEIC/g, 'jpg'),
type: image.mime,
});
return await axios.post(`/avatar/${id}`, formData);