HarmonyOS 鸿蒙Next相机拍照后如何获取图片信息(eg:宽高),上传也需要放到copy到沙盒中操作吗
HarmonyOS 鸿蒙Next相机拍照后如何获取图片信息(eg:宽高),上传也需要放到copy到沙盒中操作吗
由于真机资源问题,相机拍照相关功能只能远程调试,部分能力使用存在疑问烦请解答; https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-camerapicker-V5#pickermediatype
使用cameraPicker拍照获取resultUri后,
static async camera(options?: CameraOptions): Promise<string> {
try {
if (!options) {
options = new CameraOptions();
}
if (!options.mediaTypes || options.mediaTypes.length == 0) {
options.mediaTypes = [cameraPicker.PickerMediaType.PHOTO, cameraPicker.PickerMediaType.VIDEO];
}
let pickerProfile: cameraPicker.PickerProfile = {
cameraPosition: options.cameraPosition ? options.cameraPosition : camera.CameraPosition.CAMERA_POSITION_BACK,
videoDuration: options.videoDuration,
saveUri: options.saveUri
};
let context = getContext() as common.Context;
let pickerResult: cameraPicker.PickerResult = await cameraPicker.pick(context,
options.mediaTypes, pickerProfile);
if (pickerResult && pickerResult.resultCode === 0) { // 成功 0
if (pickerResult && pickerResult.resultUri &&
options.mediaTypes.find((mediaType) => mediaType == pickerResult.mediaType)) {
return pickerResult.resultUri; // saveUri为空,resultUri为公共媒体路径
}
} else { // 失败返回-1
return "";
}
} catch (err) {
let error = err as BusinessError;
LogUtil.error(`PickerUtil-camera-异常 ~ code: ${error.code} -·- message: ${error.message}`);
}
return "";
}
如何进一步获取对应的照片信息,是不是还是通过相册的 api 读取:phAccessHelper.getAssets
static async getPhotoAsset(uri: string): Promise<photoAccessHelper.PhotoAsset | null> {
try {
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(getContext());
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
// 配置查询条件,使用PhotoViewPicker选择图片返回的uri进行查询
predicates.equalTo('uri', uri);
let fetchOption: photoAccessHelper.FetchOptions = {
// 成员参数名称,在get时,除了'uri'、'media_type'、'subtype'和'display_name'四个属性之外,其他的属性都需要在fetchColumns中填入需要get的PhotoKeys
fetchColumns: ['media_type', 'display_name', 'size', 'title', 'width', 'height', 'date_taken',
'uri', 'duration', 'orientation', 'date_added', 'date_modified', 'is_favorite'],
predicates: predicates
};
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> =
await phAccessHelper.getAssets(fetchOption);
// 得到uri对应的PhotoAsset对象,读取文件的部分信息
if (fetchResult !== undefined) {
const photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
if (photoAsset !== undefined) {
return photoAsset;
}
}
return null;
} catch (err) {
let error = err as BusinessError;
LogUtil.error(`PhotoHelper-getPhotoAsset-异常 ~ code: ${error.code} -·- message: ${error.message}`);
return null;
}
}
期望使用api 进行上传
request.uploadFile(context, {
method: 'POST',
url: apiUrl,
header: {
'Content-Type': 'multipart/form-data',
'Accept': '*/*'
},
files: [{
filename: arr[1],
type: 'jpg',
name: 'img',
uri: arr[0]
}],
data: data
})
获取的照片是否需要下面的操作
async copyCameraToCache(resultUri: string) {
let context = getContext(this)
let segments = resultUri.split('/')
//文件名称
let fileName = segments[segments.length-1]
// 固定一个文件扩展名
const ext = 'jpg'
//计划复制到的目标路径
let realUri = context.cacheDir + "/" + fileName + '.' + ext;
//复制选择的文件到沙箱cache文件夹
try {
let file = await fs.open(resultUri);
fs.copyFileSync(file.fd, realUri)
// internal://cache代表fullPath 的文件路径
return [`internal://cache/${fileName + '.' + ext}`, fileName + '.' + ext];
} catch (err) {
return undefined
}
}
更多关于HarmonyOS 鸿蒙Next相机拍照后如何获取图片信息(eg:宽高),上传也需要放到copy到沙盒中操作吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next相机拍照后如何获取图片信息(eg:宽高),上传也需要放到copy到沙盒中操作吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,相机拍照后获取图片信息(如宽高)以及上传图片到沙盒的操作,可以通过以下步骤实现:
-
获取图片信息:
- 拍照完成后,系统会返回图片的URI或文件路径。
- 使用
MediaMetadataRetriever
类,可以通过URI或文件路径加载图片,并获取其元数据,包括宽度和高度。 - 示例代码片段(假设已有URI):
注意:由于鸿蒙API可能与Android有所不同,上述代码需根据鸿蒙API文档调整。MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { retriever.setDataSource(context, uri); String width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); String height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); // 注意:对于图片,这里返回的可能是默认的视频宽度和高度字段,需根据实际情况调整或查找其他方法。 } catch (Exception e) { e.printStackTrace(); } finally { retriever.release(); }
-
上传图片到沙盒:
- 是的,通常需要将图片文件复制到应用的私有沙盒目录中,以确保文件的安全性和隐私性。
- 使用文件I/O操作,将图片从临时存储位置复制到沙盒目录。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,