HarmonyOS NEXT應用開發之圖片拖拽AI摳圖案例

介紹

本示例介紹圖片AI摳圖案例的使用:通過Image.enableAnalyzer(true)實現長按圖片摳圖并拖拽/復制到其他應用中。

效果圖預覽

使用說明

  1. 選中需要AI摳圖的圖片。
  2. 長按需要被摳圖的元素并拖拽。
  3. 元素被AI摳圖成功并可以拖拽。

實現思路

場景:通過Image.enableAnalyzer()實現圖片AI摳圖

  • Image.enableAnalyzer()可以設置組件支持AI分析,設置為true時,組件可進行AI分析。

  • 支持分析的圖像要求是靜態非矢量圖,即svg、gif等圖像類型不支持分析,僅支持傳入PixelMap進行分析,目前僅支持RGBA_8888類型,源碼參考, 因此需要定義圖片轉成PixelMap且為RGBA_8888類型方法:

// 使圖片轉成PixelMap且為RGBA_8888類型
private async getPixmapFromMedia(resource: Resource) { 
  let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({
    bundleName: resource.bundleName,
    moduleName: resource.moduleName,
    id: resource.id
  })
  let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength));
  let createPixelMap: image.PixelMap = await imageSource.createPixelMap({
    desiredPixelFormat: image.PixelMapFormat.RGBA_8888
  })
  await imageSource.release();
  return createPixelMap;
}
  • 通過Image.enableAnalyzer(true)開啟Image組件的AI分析能力,通過調用getPixmapFromMedia()方法,將傳入的jpg圖片類型轉成支持AI摳圖的PixelMap且為RGBA_8888類型, 當用戶長按拖拽圖片中元素,即可實現AI摳圖并拖拽/復制到其他應用中。
build() {
  Swiper() {
    ForEach(this.imagePixelMapList, (item: image.PixelMap) => {
      /* 性能知識點:當數據量較大時,推薦使用懶加載加載數據。
       * 參考使用數據懶加載文章:
       * https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/performance/arkts-performance-improvement-recommendation.md/
       */
      Image(item)
        .enableAnalyzer(true) // 開啟Image組件的AI分析能力,目前支持分析PixelMap且為RGBA_8888類型的圖片
    })
  }
}

高性能知識點

不涉及

工程結構&模塊類型

imageenableanalyzer                             // har類型
|---src/main/ets/view
|   |---ImageView.ets                           // 視圖層-主頁 

模塊依賴

har包-common庫中UX標準
@ohos/routermodule(動態路由)

參考資料

Image.enableAnalyzer()參考文檔

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容