HarmonyOS Next应用开发——图像PixelMap压缩保存

ops/2024/10/23 16:19:58/

【高心星出品】

图片编码保存

图片编码指将PixelMap编码成不同格式的存档图片,当前支持打包为JPEG、WebP、png和 HEIF(不同硬件设备支持情况不同) 格式,用于后续处理,如保存、传输等。图片编码是图片解码-图片处理-图片保存的最后环节,保存到当前应用沙箱中比较简单,但保存到用户文件中就比较麻烦。

在这里插入图片描述

图片保存到应用沙箱
图片压缩成字节数组
// 图片打包器
let packer=image.createImagePacker()
let file=fileIo.openSync(getContext(this).getApplicationContext().cacheDir+'/edit.jpg',fileIo.OpenMode.CREATE|fileIo.OpenMode.READ_WRITE)
// 将pixelmap打包成字节数组packer.packing(this.src,{format:'image/jpeg',quality:100}).then((buffer)=>{// 将字节数组 写入文件fileIo.writeSync(file.fd,buffer)})
图片直接打包成文件
// 图片打包器
let packer=image.createImagePacker()
let file=fileIo.openSync(getContext(this).getApplicationContext().cacheDir+'/edit.jpg',fileIo.OpenMode.CREATE|fileIo.OpenMode.READ_WRITE)
// 直接打包成文件
packer.packToFile(this.src,file.fd,{format:'image/jpeg',quality:100}).then(()=>{promptAction.showToast({message:'文件保存成功!'})}).catch(((e:Error)=>{console.error('gxxt ',e.message)}))
完整代码
import { image } from '@kit.ImageKit';
import { fileIo } from '@kit.CoreFileKit';
import { promptAction } from '@kit.ArkUI';@Entry
@Component
struct Imgsave {@State message: string = 'Hello World';@State src:PixelMap|undefined=undefinedaboutToAppear(): void {//  资源管理器let rsmanager=getContext(this).resourceManager//  图片字节let buffer= rsmanager.getMediaContentSync($r('app.media.jingse')).buffer.slice(0)// 生成imagesourcelet source=image.createImageSource(buffer)// 生成pixelmapthis.src=source.createPixelMapSync({editable:true})}savepic(){// 图片打包器let packer=image.createImagePacker()let file=fileIo.openSync(getContext(this).getApplicationContext().cacheDir+'/edit.jpg',fileIo.OpenMode.CREATE|fileIo.OpenMode.READ_WRITE)// 将pixelmap打包成字节数组// packer.packing(this.src,{format:'image/jpeg',quality:100}).then((buffer)=>{//   // 将字节数组 写入文件//   fileIo.writeSync(file.fd,buffer)// })// 直接打包成文件packer.packToFile(this.src,file.fd,{format:'image/jpeg',quality:100}).then(()=>{promptAction.showToast({message:'文件保存成功!'})}).catch(((e:Error)=>{console.error('gxxt ',e.message)}))}build() {Column(){Image(this.src).width(300).height(300).objectFit(ImageFit.Fill)Button('变换保存').width('60%').margin({top:20}).onClick(()=>{// 图片透明度改变和图片旋转180this.src?.opacitySync(0.5)this.src?.rotate(180)//   图片保存this.savepic()})}.width('100%').height('100%')}
}
图片保存到用户文件

由于用户文件系统与应用文件系统的隔离机制,想要访问用户文件系统,首先需要加入权限ohos.permission.WRITE_IMAGEVIDEO。

鸿蒙又提供了一种临时获取用户权限的组件SaveButton,使用该组件不用申请权限可以临时获取用户文件系统的访问权限。

在这里插入图片描述

保存到相册
 //  图片打包let packer = image.createImagePacker()packer.packing(this.src, { format: 'image/jpeg', quality: 100 }).then(async (buffer) => {//   获取图片的字节数组//   获取图库图片操作管理员let phhelper = photoAccessHelper.getPhotoAccessHelper(getContext(this))// 保存相册请求 参数为上下文环境 保存类型let request = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(getContext(this),photoAccessHelper.PhotoType.IMAGE, 'jpg')// 将字节数组加入相册资源request.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, buffer)// 将相册改变保存phhelper.applyChanges(request).then(() => {promptAction.showToast({ message: '文件保存成功' })})})
完整代码
import { image } from '@kit.ImageKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { fileIo } from '@kit.CoreFileKit';
import { promptAction } from '@kit.ArkUI';@Entry
@Component
struct Imagesave1 {@State message: string = 'Hello World';@State src: PixelMap | undefined = undefinedaboutToAppear(): void {//  资源管理器let rsmanager = getContext(this).resourceManager//  图片字节let buffer = rsmanager.getMediaContentSync($r('app.media.jingse')).buffer.slice(0)// 生成imagesourcelet source = image.createImageSource(buffer)// 生成pixelmapthis.src = source.createPixelMapSync({ editable: true })}build() {Column() {Image(this.src).width(300).height(300).objectFit(ImageFit.Fill).margin({ bottom: 20 })SaveButton({ text: SaveDescription.SAVE_IMAGE }).width('60%').onClick((event: ClickEvent, result: SaveButtonOnClickResult) => {if (result == SaveButtonOnClickResult.SUCCESS) {//   授权成功//   图片水平翻转this.src?.flip(true, false)//  图片打包let packer = image.createImagePacker()packer.packing(this.src, { format: 'image/jpeg', quality: 100 }).then(async (buffer) => {//   获取图片的字节数组//   获取图库图片操作管理员let phhelper = photoAccessHelper.getPhotoAccessHelper(getContext(this))// 保存相册请求 参数为上下文环境 保存类型let request = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(getContext(this),photoAccessHelper.PhotoType.IMAGE, 'jpg')// 将字节数组加入相册资源request.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, buffer)// 将相册改变保存phhelper.applyChanges(request).then(() => {promptAction.showToast({ message: '文件保存成功' })})})} else {promptAction.showToast({ message: '权限申请失败' })}})}.width('100%').height('100%')}
}})})} else {promptAction.showToast({ message: '权限申请失败' })}})}.width('100%').height('100%')}
}

http://www.ppmy.cn/ops/127864.html

相关文章

el-table在某些条件下禁止选中

el-table在某些条件下禁止选中 废话不多说直接上代码 HTML部分 <el-table v-loading"loading" :data"wmsShipmentOrderList" ref"multipleTable" select"handleSelect" selection-change"handleSelectionChange">&…

去中心化衍生品入门:模型、挑战与机遇

在传统金融和加密世界中&#xff0c;衍生品市场的规模远超现货市场。根据最新数据&#xff0c;比特币的日现货市场交易量约为40亿美元&#xff0c;而其衍生品市场的交易量高达538.9亿美元。这一趋势在过去几年内加速增长&#xff0c;尤其是在2021年初&#xff0c;去中心化金融&…

游戏服务端架构演进

文章目录 前言初出茅庐粗通皮毛略有小成炉火纯青内劲深厚最后 前言 对于网络游戏&#xff0c;一般分为客户端和服务端&#xff0c;客户端主要负责界面图像的渲染与一些交互操作&#xff0c;服务端主要负责数据的业务处理与存储还有与客户端之间的信息交互 比如玩家聊天、广播…

探索 Python Web 开发:从框架到爬虫

Python 是 Web 开发中广泛使用的编程语言&#xff0c;因其简单、灵活和强大的生态系统&#xff0c;适合构建各种类型的 Web 应用和 API。在本篇博客中&#xff0c;我们将讨论 Web 开发的几个重要主题&#xff0c;包括 Flask 和 Django 框架、API 开发、HTTP 请求处理以及网页爬…

宇宙汽车展览如何以创新性、个性化与便捷性,重塑汽车展示生态

一、汽车展示的创新性 元宇宙汽车展览通过运用虚拟现实以及3D建模等前沿技术&#xff0c;为观众呈现出一个高度沉浸式的汽车展示环境。在这里&#xff0c;汽车不再仅仅是静态的展品&#xff0c;而是成为了一个个生动、可交互的虚拟对象。观众可以自由地环绕汽车&#xff0c;全…

C++之《剑指offer》学习记录(2):sizeof

笔者最近在找工作时&#xff0c;无意间读到了一本名为《剑指offer》的书&#xff0c;粗略翻阅了一下&#xff0c;感觉这将会是一本能让我不再苦恼于笔试和面试“手搓代码”的书。故笔者写下该系列博客记录自己的学习历程&#xff0c;希望能和这本书的读者朋友们一起交流学习心得…

通过滑动控制 图片3d(多张视频序列帧图片) 展示

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>控制图片变化</title> <style>img {…

Python基础:20、Python基础综合案例

数据可视化 - 折线图可视化 数据可视化 - 地图 数据可视化 - 动态柱状图 1.json数据格式 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能&#xff1a;json就是一种在各个编程语言中流通的数据格…