HarmonyOS 页面绘制出图片保存到相册的demo

类似html中的canvas,根据代码区域生成海报图片这类的图片,然后保存到手机相册中

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

请参考示例:

import { componentSnapshot } from '@kit.ArkUI';
import { image } from '@kit.ImageKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import fs from '@ohos.file.fs';
import { BusinessError } from '@kit.BasicServicesKit';
const context = getContext(this)
@Entry
@Component
struct ComponentSnapshotPage {
  @State message: string = 'Hello World';

  @State pixmap:image.PixelMap |null = null
  build() {
    Column(){
      buildPic()
    }
    .height('100%')
    .width('100%')
  }
}
@Builder
function buildPic() {
  Column() {
    Column() {
      Column() {
        Image($r('app.media.app_icon'))
          .width(100)
          .height(100)
          .margin({
            top: 16,
            left: 18
          })
      }
      .alignItems(HorizontalAlign.Start)
      .width('100%')

      Text('拍卖密码封条')
        .fontSize(18)
        .lineHeight(25)
        .fontColor(Color.White)
        .margin({
          top: 11,
        })
    }
    .width('100%')
    .height(100)
    .borderRadius({
      topLeft: 4,
      topRight: 4,
    })
    .backgroundImageSize(ImageSize.Cover)

    Column() {
      Text('leftText: "投标号", rightText: "bidCardInfo.cardNumber"')
      Text('leftText: "密码, rightText: "bidCardInfo.password"')
      Text('leftText: "有效期, rightText: "bidCardInfo.cardExpireDate"')
      Divider()
        .width('100%')
        .height(1)
        .backgroundColor('#F0F0F0')
        .margin({
          top: 10,
          bottom: 10,
        })
    }
    .width('100%')
    .padding({
      top: 10,
      left: 18,
      right: 18,
      bottom: 10,
    })

  }
  .width(311)
  .id('hello')
  .backgroundColor(Color.White)
  .borderRadius(4)


  Column() {
    SaveButton({ text: SaveDescription.SAVE, buttonType: ButtonType.Capsule})
      .fontSize(16)
      .fontColor('#FFFFFF')
      .backgroundColor('#2C58D0')
      .width('100%')
      .height(40)

      .onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) => {
        if (result == SaveButtonOnClickResult.SUCCESS) {
          //将图片保存到相册
          componentSnapshot.get('hello', async (error: Error, pixmap: image.PixelMap) => {
            let packOpts: image.PackingOption = { format: "image/jpeg", quality: 100 };
            const imagePackerApi = image.createImagePacker();
            imagePackerApi.packing(pixmap, packOpts).then(async (buffer: ArrayBuffer) => {
              try {
                let helper = photoAccessHelper.getPhotoAccessHelper(context)
                let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg')
                let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
                await fs.write(file.fd, buffer);
                // 关闭文件
                await fs.close(file.fd);
              } catch (error) {
                console.error("保存失败:" + JSON.stringify(error))
              }
            }).catch((error: BusinessError) => {
              console.error('保存失败,失败原因: ' + error);
            })
          })
        }
      })
  }
  .padding({
    top: 20,
    left: 18,
    right: 18,
    bottom: 20,
  })
  .width('100%')
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 图片保存到相册报错
28浏览 • 1回复 待解决
获取网络图片保存到相册
1532浏览 • 1回复 待解决
HarmonyOS如何把图片保存到手机相册
545浏览 • 1回复 待解决
如何把图片和文案结合,保存到相册
253浏览 • 0回复 待解决
HarmonyOS 如何将base64图片保存到相册
1030浏览 • 1回复 待解决
HarmonyOS 保存到相册报错13900012
27浏览 • 1回复 待解决
HarmonyOS 有没有保存到相册组件
36浏览 • 1回复 待解决
有谁知道如何将图片保存到相册
1080浏览 • 1回复 待解决
HarmonyOS如何将PixelMap保存到相册
609浏览 • 1回复 待解决
HarmonyOS图片保存相册问题
470浏览 • 1回复 待解决