HarmonyOS 鸿蒙Next 是否有大神可以提供下连拍照片加水印保存至相册的demo
HarmonyOS 鸿蒙Next 是否有大神可以提供下连拍照片加水印保存至相册的demo
不需要获取权限,也不用SaveButton
通过 photoOutput.on(‘photoAssetAvailable’)获取到photoAsset,
再通过photoAccessHelper.MediaAssetManager.requestImage获取到图片,
然后加水印,加完水印后如何保存至相册
let photoAsset : undefined| photoAccessHelper.PhotoAsset = undefined;
function setPhotoOutputCb(photoOutput: camera.PhotoOutput): void {
//监听回调之后,调用photoOutput的capture方法,低质量图上报后触发回调
photoOutput.on('photoAssetAvailable', async (err: BusinessError, photoAsset0: photoAccessHelper.PhotoAsset): Promise<void> => {
console.info('getPhotoAsset start');
console.info(`err: ${JSON.stringify(err)}`);
if ((err !== undefined && err.code !== 0) || photoAsset0 === undefined) {
console.error('getPhotoAsset failed');
return;
}
photoAsset = photoAsset0;
// 调用媒体库落盘接口保存一阶段低质量
mediaLibSavePhoto(photoAsset);
// 调用媒体库接口注册低质量图或高质量图buffer回调,自定义处理
mediaLibRequestBuffer(photoAsset);
}
)
async function mediaLibRequestBuffer(photoAsset: photoAccessHelper.PhotoAsset) {
let requestOptions: photoAccessHelper.RequestOptions = {
deliveryMode: photoAccessHelper.DeliveryMode.HIGH_QUALITY_MODE,
}
const handler = new MediaDataHandler();
await photoAccessHelper.MediaAssetManager.requestImageData(context, photoAsset, requestOptions, handler);
console.info('requestImageData successfully');
}
class MediaDataHandler implements photoAccessHelper.MediaAssetDataHandler<ArrayBuffer> {
async onDataPrepared(data: ArrayBuffer, map: Map<string, string>) {
if (data === undefined) {
console.error('Error occurred when preparing data');
return;
}
console.info('on image data prepared, photo quality is ' + map['quality']);
// 开发者可以获取到2阶段图片buffer后去做自定义修改打包 这里仅为示例(将沙箱路径的图片替换为图库2阶段图)
filePath = getContext().filesDir + "/temp.jpg";
console.log(" path: " + filePath)
let buffer = getContext().resourceManager.getMediaContentSync($r('app.media.background')).buffer as ArrayBuffer
const file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
fileIo.writeSync(file.fd, buffer);
fileIo.close(file);
let uri = fileUri.getUriFromPath(filePath)
if (photoAsset) {
let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(photoAsset);
assetChangeRequest.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, uri);
await phAccessHelper.applyChanges(assetChangeRequest);
}
}
}
更多关于HarmonyOS 鸿蒙Next 是否有大神可以提供下连拍照片加水印保存至相册的demo的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS 鸿蒙Next 实现连拍照片加水印并保存至相册的demo,可以通过以下步骤实现。这里假设你已经熟悉鸿蒙系统的开发环境,并且已经创建了一个基本的鸿蒙应用项目。
-
权限声明:在
config.json
文件中声明必要的权限,如相机权限和读写存储权限。 -
连拍照片获取:使用CameraKit组件进行连拍,可以通过设置定时器或用户触发来连续拍照。
-
添加水印:利用Canvas或ImageEditor组件对照片进行水印处理。创建Bitmap对象,使用Canvas在Bitmap上绘制水印文字或图片。
-
保存至相册:使用MediaStore API或File API将处理后的照片保存到设备相册中。注意要遵循鸿蒙系统的文件存储规范。
以下是一个简化的代码示例(伪代码形式):
// 省略了具体实现细节,仅展示流程
cameraKit.startContinuousShot((bitmap) -> {
Bitmap watermarkedBitmap = addWatermark(bitmap, "Watermark Text");
saveToGallery(watermarkedBitmap);
});
Bitmap addWatermark(Bitmap bitmap, String text) {
// 使用Canvas在bitmap上绘制水印
// ...
return watermarkedBitmap;
}
void saveToGallery(Bitmap bitmap) {
// 使用MediaStore或File API保存bitmap到相册
// ...
}
注意,上述代码仅为流程示意,具体实现需根据鸿蒙API文档进行。如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,