首页 > 其他分享 >vue3对接-捷宇SDK高拍仪

vue3对接-捷宇SDK高拍仪

时间:2024-09-26 16:22:21浏览次数:12  
标签:捷宇 控件 webSocket 拍仪 state let const data SDK

vue3对接捷宇的sdk高拍仪。

一般来说拿到捷宇对接资料,拿到控件,安装到需要的机器上

不同的设备型号,插件会不一样,

捷宇只适合windos系统。

对接资料大概这些

在对应的机器上 安装控件 (如果控件版本较老,则只支持IE浏览器)

控件无脑安装就行,控件安装完成后需要去注册表搜索 454C18E2-8B7D-43C6-8C17-B1825B49D7DE 能搜索到才行

之前售后发给我的版本就只支持ie浏览器,打开资料里面的demo文件疯狂报错(captrue.bStopPlay is not a function)/若是使用websocket就报错连接失败等等

图片这个控件版本就比较新,谷歌edg等都可以。重新安装后,点击demo就能看到高拍仪画面就行了。

废话不多说直接上代码!代码能跑咱就不用跑了!

Vue3代码

我这边简单封装了一个弹窗,具体sdk函数可以参考sdk开发指南

<template>
  <el-dialog v-model="state.dialogFormVisible" title="拍照" width="1400"
             :show-close="false" :close-on-click-modal="false" top="1vh">
    <template #header="{ close, titleId, titleClass }">
      <div class="my-header">
        <h2 :id="titleId" :class="titleClass">拍照</h2>
      </div>
    </template>

    <div style="display: flex; justify-content: space-between">
      <div class="photo" @click="bigBtn(1)">放大</div>
      <div class="photo" @click="bigBtn(0)">缩小</div>
    </div>

    <p style="position: absolute; z-index: -99">
      <OBJECT classid="clsid:454C18E2-8B7D-43C6-8C17-B1825B49D7DE" id="captrue"/>
    </p>
    <p style="height: 70vh"><img id="photoImg" src="" style="height: 100%; width: 100%;"/></p>

    <template #footer>
      <div class="dialog-footer">
        <div style="display: flex; justify-content: space-between">
          <div class="photo" @click="close">取消</div>
          <div class="photo" @click="photoBtn">拍照</div>
        </div>
      </div>
    </template>
  </el-dialog>
</template>

<script setup>
import { reactive } from 'vue'
import { ElMessage } from 'element-plus'
import { img } from '@/components/photo/img.js'

const state = reactive({
  dialogFormVisible: false,
  webSocket: null,
  myFileName: '',
  imgList: []
})
const emit = defineEmits(["getImg"]);

const bigBtn = (type) => {
  if (type == 1) state.webSocket.send('vZoomOut()') // 放大
  else state.webSocket.send('vZoomIn()') // 缩小
}

// 打开弹框方法
const show = () => {
  state.dialogFormVisible = true
  Init()
}

// 关闭弹框方法
const close = () => {
  state.webSocket.close()
  state.webSocket = null
  state.myFileName = ''
  state.dialogFormVisible = false
}

// 拍照按钮
const photoBtn = () => {
  state.myFileName = ""
  let d = new Date().getTime();
  state.myFileName = d
  // 保存jpg图片到本地
  let newData = "bSaveJPG(d:\\gpy\\images\\," + d + ")"
  state.webSocket.send(newData)
}

const uploadImg = () => {
  // 解析本地图片成base64
  let newData = "Base64Encode(d:\\gpy\\images\\" + state.myFileName + ".jpg)"
  state.webSocket.send(newData);
}

const okBtn = (file) => {
  emit("getImg", file) // 将转换的file对象传给父组件
  close()
}

const base64ToFile = (base64String, fileName) => {
  let mime = 'image/jpeg';
  // 解码 base64 字符串
  let bstr = atob(base64String);
  let n = bstr.length;
  let u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  // 创建 File 对象
  return new File([u8arr], fileName, { type: mime });
}

defineExpose({
  show,
  close
});

// 高拍仪相关 ----------------------------------------------------------------
// 初始化高拍仪
const Init = () => {
  // ip不用变,端口是高拍仪控件的端口也不要变
  state.webSocket = new WebSocket("ws://127.0.0.1:1818");
  state.webSocket.onopen = webSocketOnOpen
  state.webSocket.onerror = webSocketOnError
  state.webSocket.onmessage = webSocketOnMessage
  state.webSocket.onclose = webSocketClose
}
const webSocketOnError = () => {
  ElMessage.error("连接错误")
}
const webSocketOnOpen = () => {
  state.webSocket.send('OpenBarScanner')
}
const webSocketClose = () => {
  // alert("服务不存在或者被关闭");
}
const webSocketOnMessage = (event) => {
  //渲染页面
  document.getElementById("photoImg").src = "data:image/jpeg;base64," + event.data;
  // 拍照
  if (event.data.indexOf("BeginbSaveJPG") >= 0) {
    if (event.data.replace("BeginbSaveJPG", "").replace("EndbSaveJPG", "") == 'true') {
      ElMessage({ message: '拍照成功', type: 'success' });
      uploadImg()
    } else {
      ElMessage({ message: '拍照失败', type: 'error' });
    }
  }

  // 确定
  if (event.data.indexOf("BeginBase64Encode") >= 0) {
    let data = event.data.replace("BeginBase64Encode", "").replace("EndBase64Encode", "")
    let file = base64ToFile(data, state.myFileName)
    okBtn(file) // 传给父组件
  }
}
</script>

<style scoped lang="scss">

.photo {
  width: 406px;
  height: 80px;
  // background-image: url('@/assets/images/Frame [email protected]');
  background-size: contain;
  font-size: 40px;
  color: #FFFFFF;
  display: flex;
  justify-content: center;
  align-items: center;
  cursor: pointer;

  &:hover {
    filter: brightness(90%);;
  }
}

.my-header {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  gap: 16px;
}
</style>

标签:捷宇,控件,webSocket,拍仪,state,let,const,data,SDK
From: https://blog.csdn.net/longshehui/article/details/142561328

相关文章

  • 灵创创:AI 多模型,超120个模型,兼容 OpenAI SDK
    灵创创:最近发现了一个非常出色的AI大模型平台——AGICTO。这个平台不仅支持超过120种不同的大模型,还能实现一键切换,特别方便。不管你是使用OpenAI的SDK,还是想调试自己的ai模型,AGICTO都能轻松满足你的需求。更棒的是,他们还提供详细的开发文档,让你上手毫不费力。AGICTO的目标是成......
  • 阿里云点播SDK集成(二)封装篇
    1.上篇说到阿里云的文件上传以及注意的一些事项,今天就来说说简单的封装一下阿里云的播放器,简单说下思路(ps:在tableView或collectionView上用。为了节省资源以及滚动的流畅度,我们全局只用到1个播放器,提前加载视频并缓存本地,在滚动到当前视频的时候才去将播放器添加到cell上进行播放,......
  • 【解决了一个小问题】aws s3 sdk 中的自定义header设置哪些不参与aws v4 签名
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯在通过代理访问s3服务端的时候,s3服务端返回类似的错误信息:<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><Error><Code>AuthorizationQueryParametersE......
  • 如何正确的在项目中接入微信JS-SDK
    微信JS-SDK的功能如果你点进来,那么我相信你应该知道微信的JS-SDK可以用来做什么了。微信的官方文档描述如下。微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的......
  • 如何正确的在项目中接入微信JS-SDK
    微信JS-SDK的功能如果你点进来,那么我相信你应该知道微信的JS-SDK可以用来做什么了。微信的官方文档描述如下。微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的......
  • 阿里云点播SDK集成(一)上传篇
    目前项目中用到的就是阿里云的点播包括视频上传及播放,有做短视频的宝子们可以借鉴一下,避免少走弯路 1.省略开通或配置阿里云点播服务的平台配置,直接是iOS移动端部分,podSDK尽量用最新的#阿里云播放器pod'AliPlayerSDK_iOS'#阿里云文件上传pod'VODUpload'2.获取STS服......
  • 进阶美颜功能技术开发方案:探索视频美颜SDK
    视频美颜SDK(SoftwareDevelopmentKit)作为提升视频质量的重要工具,越来越多地被开发者关注与应用。接下俩,笔者将深入探讨进阶美颜功能的技术开发方案,助力开发者更好地利用视频美颜SDK。 一、视频美颜SDK的核心功能视频美颜SDK的核心功能主要包括人脸检测、肤色调整、磨皮美白、祛斑去......
  • 直播平台美颜功能开发方案:基于视频美颜SDK的集成详解
    本篇文章,小编将于大家共同探究视频美颜SDK的美颜功能开发方案,帮助开发者深入理解其集成过程及关键技术。 一、美颜功能的重要性在竞争激烈的直播市场中,直播平台如何提升用户体验至关重要。美颜功能不仅能够改善主播的形象,提升观众的观看体验,还能增强互动性,增加用户留存率。优秀的......
  • 应用targetSdkVersion升级指导
    应用targetSdkVersion升级指导应电信终端产业协会(TAF)发布的《移动应用软件高API等级预置与分发自律公约》(以下简称《公约》)要求:截止到2019年5月1日所有新发布的应用API必须为26或更高,2019年8月1日现有应用API必须升级为26或更高。《公约》发布至今得到了国内主流互联......
  • Android连接蓝牙自定义封装SDK(基于Cordova与ionic)
    今天给大家分享一款基于Cordova与ionic框架自定义封装的Android手机连接蓝牙的插件。自己公司遇到的业务需求是,与第三方公司合作,需要在项目现场打印项目物资与物料验收单,后期提供给财务核对报销等。第三方公司提供蓝牙打印机与手持机,我们需要自己结合业务开发相对应的功能。......