HarmonyOS 鸿蒙Next 图片裁剪如何实现

HarmonyOS 鸿蒙Next 图片裁剪如何实现 请教下,图片裁剪如何实现呢?

2 回复

图片裁剪/偏移/旋转/翻转/透明度变化场景可以参考下如下demo

import { image } from '@kit.ImageKit'
interface GeneratedTypeLiteralInterface_1 {
  textContent;
  action;
}
@Entry
@Component
struct Index {
  @State imagePixelMap: PixelMap | undefined = undefined
  @State edit: boolean = false
  aboutToAppear(): void {
  }
  @Builder
  buttonModel($$: GeneratedTypeLiteralInterface_1) {
    Button($$.textContent)
      .fontSize(14)
      .height(30)
      .width(60)
      .borderRadius(10)
      .backgroundColor('#E8A027')
      .onClick(() => {
        $$.action
        this.edit = true
      })
  }
  async get_pixelmap() {
    // 获取resourceManager资源管理
    const context = getContext(this)
    const resourceMgr = context.resourceManager
    // 获取rawfile文件夹下httpimage.PNG的ArrayBuffer
    const fileData = await resourceMgr.getMediaContent($r('app.media.testImg'))
    const buffer = fileData.buffer
    // 创建imageSource
    const imageSource = image.createImageSource(buffer)
    // 创建PixelMap
    const pixelMap = await imageSource.createPixelMap()
    return pixelMap
  }
  // 对pixelMap进行裁剪
  async crop_image() {
    let pixelMap = await this.get_pixelmap()
    // x:裁剪起始点横坐标0
    // y:裁剪起始点纵坐标0
    // height:裁剪高度300,方向为从上往下(裁剪后的图片高度为300)
    // width:裁剪宽度300,方向为从左到右(裁剪后的图片宽度为300)
    pixelMap.crop({ x: 0, y: 0, size: { height: 300, width: 300 } })
    this.imagePixelMap = pixelMap
  }
  // 对pixelMap进行缩放
  async scale_image() {
    let pixelMap = await this.get_pixelmap()
    pixelMap.scale(0.5, 0.5)
    this.imagePixelMap = pixelMap
  }
  // 对pixelMap进行偏移
  async translate_image() {
    let pixelMap = await this.get_pixelmap()
    pixelMap.translate(100, 100);
    this.imagePixelMap = pixelMap
  }
  // 对pixelMap进行旋转
  async rotate_image() {
    let pixelMap = await this.get_pixelmap()
    pixelMap.rotate(90);
    this.imagePixelMap = pixelMap
  }
  // 对pixelMap进行翻转
  // 垂直翻转
  async flip_image() {
    let pixelMap = await this.get_pixelmap()
    pixelMap.flip(false, true);
    this.imagePixelMap = pixelMap
  }
  // 对pixelMap进行透明度调整
  async opacity_image() {
    let pixelMap = await this.get_pixelmap()
    pixelMap.opacity(0.5);
    this.imagePixelMap = pixelMap
  }
  build() {
    Column() {
      Row() {
        Button("裁剪").onClick(() => {
          this.crop_image()
        })
      }
      Row() {
        Image($r('app.media.testImg'))
          .objectFit(ImageFit.Contain)
          .width('50%')
        Image(this.imagePixelMap)
          .objectFit(ImageFit.Contain)
          .width('50%')
      }.height('70%').width('100%')
    }.height('100%').width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next 图片裁剪如何实现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中实现图片裁剪功能,可以通过调用鸿蒙系统提供的多媒体API来完成。以下是一个简要的实现思路:

  1. 加载图片:首先,你需要从资源或文件中加载待裁剪的图片。鸿蒙提供了丰富的图片加载接口,可以直接使用。

  2. 设置裁剪区域:确定需要裁剪的图片区域,这通常包括起始坐标(x, y)以及裁剪区域的宽度和高度。

  3. 执行裁剪操作:使用鸿蒙提供的图片裁剪函数,传入裁剪区域参数,对图片进行裁剪。裁剪后的图片数据可以保存在内存中或直接输出到文件。

  4. 显示或保存裁剪后的图片:根据需求,你可以选择将裁剪后的图片显示在界面上,或者保存到存储介质中。

需要注意的是,鸿蒙系统的API可能会随着版本的更新而有所变化,因此在实际开发中,建议参考最新的鸿蒙开发文档来获取最准确的API信息和使用方法。

此外,鸿蒙系统支持多种编程语言进行开发,包括但不限于ArkUI(基于JS/TS的声明式UI框架)和eTS(Enhanced TypeScript,一种用于构建鸿蒙应用的增强型TypeScript语言)。在实现图片裁剪功能时,可以根据你的开发环境和需求选择合适的编程语言。

如果问题依旧没法解决请联系官网客服,官网地址是

回到顶部