介紹
本示例介紹圖片AI摳圖案例的使用:通過Image.enableAnalyzer(true)實現長按圖片摳圖并拖拽/復制到其他應用中。
效果圖預覽
使用說明
- 選中需要AI摳圖的圖片。
- 長按需要被摳圖的元素并拖拽。
- 元素被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(動態路由)