介紹
本示例介紹圖片AI摳圖案例的使用:通過 Image.enableAnalyzer(true) 實現長按圖片摳圖并拖拽/復制到其他應用中。
效果圖預覽
使用說明
- 選中需要AI摳圖的圖片。
- 長按需要被摳圖的元素并拖拽。
- 元素被AI摳圖成功并可以拖拽。
實現思路
場景:通過Image.enableAnalyzer()實現圖片AI摳圖
Image.enableAnalyzer()可以設置組件支持AI分析,設置為true時,組件可進行AI分析。
支持分析的圖像要求是靜態非矢量圖,即svg、gif等圖像類型不支持分析,僅支持傳入PixelMap進行分析,目前僅支持RGBA_8888類型,ImageView.ets,
因此需要定義圖片轉成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://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/arkts-performance-improvement-recommendation.md
*/
Image(item)
.enableAnalyzer(true) // 開啟Image組件的AI分析能力,目前支持分析PixelMap且為RGBA_8888類型的圖片
})
}
}
高性能知識點
不涉及
工程結構&模塊類型
imageenableanalyzer // har類型
|---src/main/ets/view
| |---ImageView.ets // 視圖層-主頁
寫在最后
- 如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:
- 點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力。
- 關注小編,同時可以期待后續文章ing??,不定期分享原創知識。
- 想要獲取更多完整鴻蒙最新學習知識點,請移步前往小編:
https://gitee.com/MNxiaona/733GH/blob/master/jianshu