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

2 回复

在HarmonyOS NEXT中,图片文字识别可通过@ohos.ai.textRecognition模块实现,使用textRecognition.detectText方法识别图片中的文字。滑动复制需结合手势事件和系统剪贴板API,通过@ohos.miscServices.pasteboardsetSystemPasteboard写入文本。具体实现需注册滑动手势监听,获取选中文本范围后调用剪贴板接口。文字识别依赖ImageSource创建图片输入源,滑动复制需使用TextArea或自定义文本组件处理选区操作。

更多关于HarmonyOS鸿蒙Next中图片文字识别和滑动复制文字的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中实现图片文字识别和滑动复制功能,主要分为以下几个关键步骤:

  1. 文字识别部分:
  • 使用@kit.CoreVisionKit中的textRecognition模块
  • 核心API:recognizeText()执行OCR识别
  • 需要先初始化(textRecognition.init())并在适当时机释放资源(textRecognition.release())
  1. 滑动复制实现:
  • 通过onAreaChange记录每个字符的位置信息
  • 使用PanGesture处理滑动手势,计算选中区域
  • 结合onTouch事件确定选择范围
  • 最终通过@kit.BasicServicesKitpasteboard模块实现复制到剪贴板
  1. 代码要点:
  • 图像处理需转换为PixelMap格式
  • 字符位置信息存储为{x,y,width,height}
  • 复制时使用createData()setData()方法

整个过程需要注意资源管理和错误处理,特别是在识别失败或复制操作异常时的用户反馈。

回到顶部