HarmonyOS鸿蒙Next中图片文字识别和滑动复制文字
HarmonyOS鸿蒙Next中图片文字识别和滑动复制文字
开发准备
识别文字和滑动复制文字分别需要导入以下依赖。
import { textRecognition } from '@kit.CoreVisionKit';//用于文字识别能力
import { BusinessError, pasteboard } from '@kit.BasicServicesKit';//用于对剪切板操作,支持复制文本到剪贴板。
实现文字识别功能
获取图像资源
通过封装工具类处理不同类型的图片来源(本地路径、网络URL、资源文件)并保存到沙箱中。
封装方法加载图片并将其转换为PixelMap对象供后续识别使用。
const file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE)
const imageSource = image.createImageSource(file.fd)
return await imageSource.createPixelMap()
调用文字识别API
在aboutToAppear()生命周期钩子中调用textRecognition.init()进行初始化文字识别模块。
使用textRecognition.recognizeText(visionInfo, textConfiguration)执行实际的文字识别操作,并将结果存储在dataValues中
try {
const result = await textRecognition.recognizeText(visionInfo, textConfiguration)
console.log('文字识别结果:' + this.dataValues)
if (!result.value) {
promptAction.showToast({ message: '该图片识别不到文字' })
PromptQrTextResultDialog.closeDialog()
return
}
this.dataValues = result.value
this.updateCharList() // 初始化字符列表
this.showBindSheet = true
} catch (e) {
promptAction.showToast({ message: '文字识别失败' })
}
释放资源
在组件销毁前调用textRecognition.release()
释放识别资源,避免内存泄漏。
实现滑动复制图片功能
字符布局与绑定位置信息
将识别出的文本按行拆分为字符数组,并通过onAreaChange事件记录每个字符的位置(x, y)、宽度和高度。构建lineGroups结构,便于后续对每一行字符进行操作。
.onAreaChange((_: Area, newValue: Area) => {
charInfo.width = newValue.width;
charInfo.height = newValue.height;
charInfo.x = newValue.globalPosition.x;
charInfo.y = newValue.globalPosition.y;
})
手势交互处理和触摸事件处理
使用PanGesture监听横向滑动手势,用于多选操作,在onActionUpdate回调中计算当前滑动区域内的字符范围,并更新其isSelected状态以高亮选中字符
监听onTouch事件,记录起始点和结束点,确定用户选择的矩形区域,根据触点坐标判断哪些字符位于该区域内,并相应地更新它们的选中状态
复制选中文本
收集所有被选中的字符,按照原始顺序拼接成字符串,利用pasteboard模块将最终结果复制到系统剪贴板,并给出提示反馈
copyText(text: string) {
const pasteboardData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, text);
const systemPasteboard = pasteboard.getSystemPasteboard();
systemPasteboard.setData(pasteboardData); // 将数据放入剪切板
systemPasteboard.getData().then(data => {
// 成功和失败处理
})
}
更多关于HarmonyOS鸿蒙Next中图片文字识别和滑动复制文字的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中实现图片文字识别和滑动复制功能,主要分为以下几个关键步骤:
- 文字识别部分:
- 使用
@kit.CoreVisionKit
中的textRecognition
模块 - 核心API:
recognizeText()
执行OCR识别 - 需要先初始化(
textRecognition.init()
)并在适当时机释放资源(textRecognition.release()
)
- 滑动复制实现:
- 通过
onAreaChange
记录每个字符的位置信息 - 使用
PanGesture
处理滑动手势,计算选中区域 - 结合
onTouch
事件确定选择范围 - 最终通过
@kit.BasicServicesKit
的pasteboard
模块实现复制到剪贴板
- 代码要点:
- 图像处理需转换为
PixelMap
格式 - 字符位置信息存储为
{x,y,width,height}
- 复制时使用
createData()
和setData()
方法
整个过程需要注意资源管理和错误处理,特别是在识别失败或复制操作异常时的用户反馈。