当前位置: 首页 > news >正文

鸿蒙保存图片到相册

1.base64图片数据保存到相册

const base64Data: string = data as string
const base64Str = base64Data.split(',')[1];
const imgBuffer = buffer.from(base64Str, 'base64')
bufferArray = imgBuffer.buffer
const context = getContext();let helper = photoAccessHelper.getPhotoAccessHelper(context);let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'png', {title: fileName,})let file = await fileIo.open(uri, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);// 写入图片fileIo.writeSync(file.fd, bufferArray);// 关闭文件await fileIo.close(file.fd);sysToast($r('app.string.toast_saved'))

2.base64图片数据转PixelMap

const base64Data: string = data as string const base64Str = base64Data.split(',')[1]; const imgBuffer = buffer.from(base64Str, 'base64')

bufferArray = imgBuffer.buffer

// 创建ImageSource
const imageSource = image.createImageSource(bufferArray);const decodingOptions : image.DecodingOptions = {desiredSize: { width: 0, height: 0 }, // 0表示使用原始尺寸desiredPixelFormat: image.PixelMapFormat.RGBA_8888,desiredRegion: { size: { width: 0, height: 0 }, x: 0, y: 0 }
};
const pixelMap = await imageSource.createPixelMap(decodingOptions);saveTo(pixelMap)

3.PixelMap转ArrayBuffer

const imagePackerApi = image.createImagePacker();
const packOpts: image.PackingOption = {format: 'image/jpeg', // 'image/jpeg' 或 'image/png'quality: 100    // 质量,对JPEG有效 (0-100)
};try {bufferArray = await imagePackerApi.packing(data, packOpts);
} catch (packError) {console.error(`Failed to pack image. Code: ${(packError as BusinessError).code}, message: ${(packError as BusinessError).message}`);
}

4. 从共享视频组件获取当前帧图像

const id = this.xComponentController.getXComponentSurfaceId(); const backgroundPix: PixelMap = await image.createPixelMapFromSurface(id);

5.叠加组合2个PixelMap

if (!foregroundPix || !backgroundPix) {return undefined;
}// 使用背景图片的尺寸作为目标尺寸
const imageInfo = await backgroundPix.getImageInfo()
const width = imageInfo.size.width;
const height = imageInfo.size.height;const canvas = new drawing.Canvas(backgroundPix);let rect: common2D.Rect = { left: 0, top: 0, right: width, bottom: height }
// 依次绘制每张图片
canvas.drawImageRect(foregroundPix, rect);return backgroundPix;
http://www.dtcms.com/a/391803.html

相关文章:

  • 【C语言】喝汽水问题分析:20元能喝多少瓶汽水?
  • 二物理层-ADSL-思考题
  • PyQt6之滑动条
  • 虚拟机ubuntu安装中文输入法
  • 康奈尔大学视觉-语言-动作模型全面综述:概念、进展、应用与挑战
  • 单片机--中断实验
  • 嵌入式 - GPIO
  • 一款商用的基于SpringBoot+VUE的出货单智能比对系统
  • systemctl 在启动服务时的 常用参数
  • 【MySQL】SQL性能分析
  • 【软件测试Linux】详细Linux介绍和各种命令的场景应用
  • 【MySQL】使用C/C++链接mysql数据库
  • 【复现】【充换电站】考虑用户充电负荷-最优分时电价互动的光储充换电站优化模型
  • 多光谱相机按不同分类的几种类型
  • Linux中select、poll 和 epoll的作用
  • JavaScript原型链全面解析
  • mysql相关优化
  • electron-forge踩坑记录
  • 00-基于django+vue3+ts的前后端分离RBAC权限管理系统
  • Go语言-->切片
  • 《Java网络编程》第二章:Stream流
  • 速卖通“AI全站推”上新!跨境卖家如何利用 AI 做营销
  • Apple Developer Program注册被拒原因分析与技术性申诉指南
  • 卷积神经网络从入门到经典模型详解
  • C#超市商品管理系统入门级实现
  • 自注意力机制Self-Attention (二)
  • InternVLA-N1——规划-执行双系统下的VLN基础模型:具备学习型的潜在规划能力,可部署在轮式、四足、双足人形上
  • 睡眠PSG数据集技术
  • 【AI落地应用实战】利用亚马逊云科技 Step Functions 集成现有系统快速实现个性化邮件触达
  • 手机备忘录待办APP工具评测