iv-npm
Version:
公共通用包
713 lines (587 loc) • 24.7 kB
JavaScript
var url = "ws://127.0.0.1:22225";
var websocket;
var connected = false;
var isSocketConnect = false;
var openFlagA = false;
var isOpenMainCamera = false;
var MainCanvas;
var MainContext;
var pMainShowStartX = 0;
var pMainShowStartY = 0;
var isMouseDown = false;
var pALastX = 0;
var pALastY = 0;
var pACurrentX = 0;
var pACurrentY = 0;
var MainCamCutMode = 0;
var isOpenAssistCamera = false;
var AssistCanvas;
var AssistContext;
var pAssistShowStartX;
var pAssistShowStartY;
function releaseSocketPro() {
var data = JSON.stringify({ 'function': 'releaseSocketPro' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data)
}
window.onbeforeunload = function () {
Cam_Close(); //关闭摄像头
try {
releaseSocketPro(); //>>>>>>>>>>>>>>>>.修改的地方>>>>>>>>>>>>>>>
websocket.close();
websocket = null;
}
catch (ex) {
}
};
function $(id) {
return document.getElementById(id);
}
function toSleep(milliSeconds) {
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliSeconds);
}
function addEvent(obj, xEvent, fn) {
if (obj.attachEvent) {
obj.attachEvent('on' + xEvent, fn);
} else {
obj.addEventListener(xEvent, fn, false);
}
}
function InitCanvas(DivMainBox, mX, mY, mwidth, mheight) {
if (mwidth != 0 && mheight != 0) {
MainCanvas = document.createElement("canvas");
MainCanvas.style.border = "solid 1px #A0A0A0";
MainCanvas.id = "MainCamCanvas";
MainCanvas.width = mwidth;
MainCanvas.height = mheight;
MainContext = MainCanvas.getContext("2d");
DivMainBox.appendChild(MainCanvas); //添加画布
MainCanvas.onmousedown = MainCanvasMouseDown;
MainCanvas.onmousemove = MainCanvasMouseMove;
MainCanvas.onmouseup = MainCanvasMouseUp;
MainCanvas.onmouseout = MainCanvasMouseOut;
addEvent(MainCanvas, 'mousewheel', onMouseWheel);
addEvent(MainCanvas, 'DOMMouseScroll', onMouseWheel);
}
}
function InitCanvas2(DivMainBox, mX, mY, mwidth, mheight) {
if (mwidth != 0 && mheight != 0) {
AssistCanvas = document.createElement("canvas");
AssistCanvas.style.border = "solid 1px #A0A0A0";
AssistCanvas.id = "AssistCamCanvas";
AssistCanvas.width = mwidth;
AssistCanvas.height = mheight;
AssistContext = AssistCanvas.getContext("2d");
DivMainBox.appendChild(AssistCanvas); //添加画布
}
}
//*************摄像头操作初始化***************
function Cam_ControlInit(documentObj, mX, mY, mwidth, mheight) {
ConnectServer(sendMessage, ""); //连接服务器
InitCanvas(documentObj, mX, mY, mwidth, mheight);
console.log("InitCanvas ok");
}
function Cam_ControlInit2(documentObj, mX, mY, mwidth, mheight) {
InitCanvas2(documentObj, mX, mY, mwidth, mheight);
console.log("InitCanvas ok2");
}
//>>>>>>>>>>>>>>>>.修改的地方>>>>>>>>>>>>>>>
var lockReconnect = false;
var connectCount = 0;
var heartTimerId = -1;
//心跳检测
function heartCheck() {
clearInterval(heartTimerId);
heartTimerId = setInterval(function () {
if (isSocketConnect) {
Heartbeat();
}
}, 6500);
}
//掉线重连
var intervalId = -1;
function reconnect() {
clearInterval(intervalId);
intervalId = setInterval(function () {
if (isSocketConnect == false) {
Heartbeat();
console.log("reconnect...")
}
console.log("reconnectTimer.........!")
}, 3000);
}
/**
* 初始化webSocket连接
* @param callback
* @param value
* @constructor
*/
function ConnectServer(callback, value) {
if ('WebSocket' in window) {
websocket = new WebSocket(url);
} else if (window.WebSocket) {
websocket = new WebSocket(url);
} else if ('MozWebSocket' in window) {
websocket = new MozWebSocket(url);
} else {
alert("您浏览器版本过低!请使用Chrome、Firefox、IE10+浏览器!");
}
websocket.onopen = function (e) {
connected = true;
heartCheck();
isSocketConnect = true;
clearInterval(intervalId);
Cam_GetDevCount();
}
websocket.onclose = function (e) {
connected = false;
isSocketConnect = true;
reconnect();
}
websocket.onmessage = function (e) {
onMessage(e);
}
websocket.onerror = function (e) {
isSocketConnect = true;
reconnect();
alert("未连接文豆高拍仪服务,请确保已运行服务端!!!")
};
}
/**
* 接收服务器消息
* @param e
*/
function onMessage(e) {
var Obj = JSON.parse(e.data.replace(/[\r\n]/g, ""));
//通用回调处理函数 jsonObj
//var jsonObj=Utf8ToUnicode(Obj);
cameraProduceMessage(Obj);
}
/**
* 向服务器发送信息的共享方法
* @param jsonStr
*/
function sendMessage(jsonStr) {
connected ? websocket.send(jsonStr) : alert("未连接websocket服务器,请确保已运行服务端!")
}
/*****************************************************************************************************************/
function cameraProduceMessage(jsonObj) {
if (jsonObj.functionName == "VideoStream") {
var bstr = atob(jsonObj.imgBase64Str);
var n = bstr.length;
//var rDataArr = new Uint8Array(n);
// while (n--) {
// rDataArr[n] = bstr.charCodeAt(n)
// }
if (n == jsonObj.width * jsonObj.height * 3) {
MainContext.clearRect(0, 0, MainCanvas.width, MainCanvas.height);
var imgData = MainContext.createImageData(jsonObj.width, jsonObj.height);
var dataNum = 0;
for (var i = 0; i < imgData.data.length; i += 4) {
imgData.data[i + 3] = 255;
imgData.data[i + 0] = bstr.charCodeAt(dataNum);
imgData.data[i + 1] = bstr.charCodeAt(dataNum + 1);
imgData.data[i + 2] = bstr.charCodeAt(dataNum + 2);
imgData.data[i + 3] = 255;
dataNum = dataNum + 3;
}
pMainShowStartX = jsonObj.StartX;
pMainShowStartY = jsonObj.StartY;
MainContext.putImageData(imgData, pMainShowStartX, pMainShowStartY);
if (MainCamCutMode == 2) {
MainContext.strokeStyle = 'blue';
MainContext.lineWidth = 2;
MainContext.beginPath();
MainContext.rect(pALastX, pALastY, (pACurrentX - pALastX), (pACurrentY - pALastY));
MainContext.closePath();
MainContext.stroke();
}
}
}
else if (jsonObj.functionName == "VideoStream2") {
var bstr = atob(jsonObj.imgBase64Str);
var n = bstr.length;
if (n == jsonObj.width * jsonObj.height * 3) {
AssistContext.clearRect(0, 0, AssistCanvas.width, AssistCanvas.height);
var imgData = AssistContext.createImageData(jsonObj.width, jsonObj.height);
var dataNum = 0;
for (var i = 0; i < imgData.data.length; i += 4) {
imgData.data[i + 3] = 255;
imgData.data[i + 0] = bstr.charCodeAt(dataNum);
imgData.data[i + 1] = bstr.charCodeAt(dataNum + 1);
imgData.data[i + 2] = bstr.charCodeAt(dataNum + 2);
imgData.data[i + 3] = 255;
dataNum = dataNum + 3;
}
pAssistShowStartX = jsonObj.StartX;
pAssistShowStartY = jsonObj.StartY;
AssistContext.putImageData(imgData, pAssistShowStartX, pAssistShowStartY);
}
}
else if (jsonObj.functionName == "Cam_GetDevCount") {
var camName = new Array();
camName = jsonObj.DevName.split('|');
GetDevCountAndNameResultCB(jsonObj.DevCount, camName);
}
else if (jsonObj.functionName == "Cam_GetDevResolution") {
var resArr = new Array();
resArr = jsonObj.Resolution.split('|');
GetResolutionResultCB(jsonObj.ResolutionCount, resArr);
}
else if (jsonObj.functionName == "Cam_Open") {
var status = jsonObj.success;
if (status == 0) {
isOpenMainCamera = true;
GetCameraOnOffStatus(0);
}
else {
isOpenMainCamera = false;
GetCameraOnOffStatus(-1);
}
}
else if (jsonObj.functionName == "Cam_Photo") {
var filePath = decodeURIComponent(jsonObj.filePath);
console.log(jsonObj,'-------------------filePath')
GetCaptrueImgResultCB(jsonObj.success, filePath, jsonObj.base64);
}
else if (jsonObj.functionName == "Cam_ReadIdCard") {
if (jsonObj.success == 0) {
var resultStr = new Array();
var decodeStr = decodeURIComponent(jsonObj.CardInfo);
resultStr = decodeStr.split(';');
GetIdCardInfoResultCB(jsonObj.success, resultStr[0], resultStr[1], resultStr[2], resultStr[3], resultStr[4], resultStr[5], resultStr[6], resultStr[7], resultStr[8], resultStr[9]);
}
else {
GetIdCardInfoResultCB(jsonObj.success, "", "", "", "", "", "", "", "", "", "");
}
}
else if (jsonObj.functionName == "UploadFile") {
var iRestStr = decodeURIComponent(jsonObj.ResultStr);
HttpResultCB(jsonObj.success, iRestStr);
}
else if (jsonObj.functionName == "Cam_RecogQrBarCodeFromCamera") {
var iRestStr = decodeURIComponent(jsonObj.content);
QrBarCodeRecogResultCB(jsonObj.success, iRestStr);
}
else if (jsonObj.functionName == "Cam_RecogQrBarCodeFromFile") {
var iRestStr = decodeURIComponent(jsonObj.content);
QrBarCodeRecogResultCB(jsonObj.success, iRestStr);
}
else if (jsonObj.functionName == "Cam_AddImgFileToPDF") {
AddImgFileToPDFResultCB(jsonObj.success, jsonObj.base64);
}
else if (jsonObj.functionName == "Cam_CombinePDF") {
PdfCombineResultCB(jsonObj.success, jsonObj.base64);
}
else if (jsonObj.functionName == "Cam_AddMergeImageFile") {
AddMergeImageFileResultCB(jsonObj.success, jsonObj.base64);
}
else if (jsonObj.functionName == "Cam_MergeImages") {
MergeImagesResultCB(jsonObj.success, jsonObj.base64);
}
else if (jsonObj.functionName == "ReadCamLicense") {
GetLicenseResultCB(jsonObj.LisencesStr);
}
else if (jsonObj.functionName == "GetDrives") {
GetDriveResultCB(jsonObj.DrivesName);
}
else if (jsonObj.functionName == "DeleteFile") {
GetDeleteFileResultCB(jsonObj.success);
}
else if (jsonObj.functionName == "OpenDualCamera") {
GetOpenDualCameraResultCB(jsonObj.success);
}
else if (jsonObj.functionName == "TakeDualCameraPhoto") {
var filePath1 = decodeURIComponent(jsonObj.filePath1);
var filePath2 = decodeURIComponent(jsonObj.filePath2);
GetDualCameraPhotoResultCB(jsonObj.success, filePath1, jsonObj.Abase64, filePath2, jsonObj.Bbase64);
}
else if (jsonObj.functionName == "Heartbeat") {
console.log("Heartbeat...")
}
}
/*****************************************************************************************************************/
function Heartbeat() {
var data = JSON.stringify({ 'function': 'Heartbeat' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data)
}
//*************获取设备数目***************
function Cam_GetDevCount() {
var data = JSON.stringify({ 'function': 'Cam_GetDevCount' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data)
}
//***************获取分辨率***************
function Cam_GetDevResolution(iCamNo) {
var data = JSON.stringify({ 'function': 'Cam_GetDevResolution', 'iCamNo': iCamNo });
connected ? sendMessage(data) : ConnectServer(sendMessage, data)
}
//*************打开主摄像头***************
function Cam_Open(iCamNo, width, height) {
var data = JSON.stringify({ 'function': 'Cam_Open', 'iCamNo': iCamNo, 'width': width, 'height': height, 'viewWidth': MainCanvas.width, 'viewHeight': MainCanvas.height });
connected ? sendMessage(data) : ConnectServer(sendMessage, data)
}
//*************关闭摄像头***************
function Cam_Close() {
var data = JSON.stringify({ 'function': 'Cam_Close', 'iCamNo': 0 });
connected ? sendMessage(data) : ConnectServer(sendMessage, data)
}
//*************拍照***************
function Cam_Photo(filePath) {
if (MainCamCutMode == 2) {
var rectx, recty, rectw, recth;
if (pALastX > pACurrentX)
rectx = pACurrentX;
else
rectx = pALastX;
if (pALastY > pACurrentY)
recty = pACurrentY;
else
recty = pALastY;
rectw = Math.abs(pACurrentX - pALastX);
recth = Math.abs(pACurrentY - pALastY);
Cam_SetManualCutRect(rectx, recty, rectw, recth); //手动裁剪区域
}
var data = JSON.stringify({ 'function': 'Cam_Photo', 'filePath': filePath });
connected ? sendMessage(data) : ConnectServer(sendMessage, data)
}
//*************放大***************
function Cam_ZoomIn() {
var data = JSON.stringify({ 'function': 'Cam_ZoomIn' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************缩小***************
function Cam_ZoomOut() {
var data = JSON.stringify({ 'function': 'Cam_ZoomOut' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************适合大小***************
function Cam_BestSize() {
var data = JSON.stringify({ 'function': 'Cam_BestSize' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************1:1***************
function Cam_TrueSize() {
var data = JSON.stringify({ 'function': 'Cam_TrueSize' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************旋转***************
function Cam_Rotate(angle) {
var data = JSON.stringify({ 'function': 'Cam_Rotate', 'angle': angle });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************左旋***************
function Cam_RotateLeft() {
var data = JSON.stringify({ 'function': 'Cam_RotateLeft' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************右旋***************
function Cam_RotateRight() {
var data = JSON.stringify({ 'function': 'Cam_RotateRight' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************对焦***************
function Cam_Focus() {
var data = JSON.stringify({ 'function': 'Cam_Focus' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************设置视频属性***************
function Cam_ShowVideoProp() {
var data = JSON.stringify({ 'function': 'Cam_ShowVideoProp' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************设置裁剪模式***************
function Cam_SetCutMode(CutMode) {
MainCamCutMode = CutMode;
var data = JSON.stringify({ 'function': 'Cam_SetCutMode', 'CutMode': CutMode });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************设置手动裁切参数***************
function Cam_SetManualCutRect(rectx, recty, rectw, recth) {
var data = JSON.stringify({ 'function': 'Cam_SetManualCutRect', 'rectx': rectx, 'recty': recty, 'rectw': rectw, 'recth': recth });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************设置自定义裁切范围***************
function SetCustomArea(iX1, iY1, iX2, iY2) {
var data = JSON.stringify({ 'function': 'SetCustomArea', 'iX1': iX1, 'iY1': iY1, 'iX2': iX2, 'iY2': iY2 });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************读取身份证信息*************
function Cam_ReadIdCard(cardImgPath) {
var data = JSON.stringify({ 'function': 'Cam_ReadIdCard', 'cardImgPath': cardImgPath });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************上传文件*************
function UploadFile(url, filepath) {
var data = JSON.stringify({ 'function': 'UploadFile', 'url': url, 'filePath': filepath });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************设置文件格式*************
function Cam_SetFileType(filetype) {
var data = JSON.stringify({ 'function': 'Cam_SetFileType', 'filetype': filetype });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************设置JPG图片质量*************
function Cam_SetJpgQuality(val) {
var data = JSON.stringify({ 'function': 'Cam_SetJpgQuality', 'quality': val });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************设置色彩模式*************
function Cam_SetColorMode(colorMode) {
var data = JSON.stringify({ 'function': 'Cam_SetColorMode', 'colorMode': colorMode });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************设置去黑边*************
function Cam_SetDeleteBlackEdge(flag) {
var data = JSON.stringify({ 'function': 'Cam_SetDeleteBlackEdge', 'flag': flag });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************设置去底色*************
function Cam_SetDeleteBgColor(flag) {
var data = JSON.stringify({ 'function': 'Cam_SetDeleteBgColor', 'flag': flag });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************从摄像头中识别二维码条码*************
function Cam_RecogQrBarCodeFromCamera(type) {
var data = JSON.stringify({ 'function': 'Cam_RecogQrBarCodeFromCamera', 'type': type });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************从图片文件中识别二维码条码*************
function Cam_RecogQrBarCodeFromFile(type, filepath) {
var data = JSON.stringify({ 'function': 'Cam_RecogQrBarCodeFromFile', 'type': type, 'filePath': filepath });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************添加要合并的图片到PDF*************
function Cam_AddImgFileToPDF(filepath) {
var data = JSON.stringify({ 'function': 'Cam_AddImgFileToPDF', 'filePath': filepath });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************合并PDF*************
function Cam_CombinePDF(filepath) {
var data = JSON.stringify({ 'function': 'Cam_CombinePDF', 'filePath': filepath });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************添加图像合并文件*************
function Cam_AddMergeImageFile(filepath) {
var data = JSON.stringify({ 'function': 'Cam_AddMergeImageFile', 'filePath': filepath });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************图像合并*************
function Cam_MergeImages(filepath,dir) {
var data = JSON.stringify({ 'function': 'Cam_MergeImages', 'filePath': filepath, 'dir': dir });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************获取驱动盘符*************
function GetDrives() {
var data = JSON.stringify({ 'function': 'GetDrives' });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************删除文件*************
function DeleteFile(filePath) {
var data = JSON.stringify({ 'function': 'DeleteFile', 'filePath': filePath });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************设置水印*************
function SetWaterMark(isAdd, wType, addTime, wTransp, wPos, wSize, wColor, szInfo) {
var data = JSON.stringify({ 'function': 'SetWaterMark', 'isAdd': isAdd, 'wType': wType, 'addTime': addTime, 'wTransp': wTransp, 'wPos': wPos, 'wSize': wSize, 'wColor': wColor, 'szInfo': szInfo });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************图像移动*************
function MoveOffsetXY(px, py, xdir, ydir) {
var data = JSON.stringify({ 'function': 'MoveOffsetXY', 'px': px, 'py': py, 'xdir': xdir, 'ydir': ydir });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************打开双目摄像头*************
function OpenDualCamera() {
var data = JSON.stringify({ 'function': 'OpenDualCamera', 'viewWidth': MainCanvas.width, 'viewHeight': MainCanvas.height, 'viewWidth2': AssistCanvas.width, 'viewHeight2': AssistCanvas.height });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//*************关闭双目摄像头*************
function CloseDualCamera() {
var data = JSON.stringify({ 'function': 'CloseDualCamera'});
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
//******************双目拍照****************
function TakeDualCameraPhoto(filepath1,filepath2) {
var data = JSON.stringify({ 'function': 'TakeDualCameraPhoto', 'filePath1': filepath1, 'filePath2': filepath2 });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
function ReadCamLicense() {
var data = JSON.stringify({ 'function': 'ReadCamLicense'});
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
function SetInchImgType(sizetype) {
var data = JSON.stringify({ 'function': 'SetInchImgType', 'sizetype': sizetype });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
function SetInchLineType(linetype) {
var data = JSON.stringify({ 'function': 'SetInchLineType', 'linetype': linetype });
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
function onMouseWheel(ev) { /*当鼠标滚轮事件发生时,执行一些操作*/
var ev = ev || window.event;
var down = true;
per = 1;
down = ev.wheelDelta ? ev.wheelDelta < 0 : ev.detail > 0;
if (down) {
Cam_ZoomOut();
} else {
Cam_ZoomIn();
}
return false;
}
function MainCanvasMouseDown(e) {
isMouseDown = true;
pALastX = e.pageX - MainCanvas.offsetLeft;
pALastY = e.pageY - MainCanvas.offsetTop;
if (MainCamCutMode == 2) {
pACurrentX = pALastX;
pACurrentY = pALastY;
}
}
function MainCanvasMouseUp(e) {
isMouseDown = false;
}
function MainCanvasMouseOut(e) {
isMouseDown = false;
}
function MainCanvasMouseMove(e) {
if (isMouseDown) {
if (MainCamCutMode == 2) {
pACurrentX = e.pageX - MainCanvas.offsetLeft;
pACurrentY = e.pageY - MainCanvas.offsetTop;
var rectx, recty, rectw, recth;
if (pALastX > pACurrentX)
rectx = pACurrentX;
else
rectx = pALastX;
if (pALastY > pACurrentY)
recty = pACurrentY;
else
recty = pALastY;
rectw = Math.abs(pACurrentX - pALastX);
recth = Math.abs(pACurrentY - pALastY);
Cam_SetManualCutRect(rectx, recty, rectw, recth); //手动裁剪区域
//console.log(rectx + "," + recty + "," + rectw + "," + recth);
}
else {
pACurrentX = e.pageX - MainCanvas.offsetLeft;
pACurrentY = e.pageY - MainCanvas.offsetTop;
var dx = pACurrentX - pALastX;
var dy = pACurrentY - pALastY;
var xdir = 0;
var ydir = 0;
if (dx < 0)
xdir = 0;
else
xdir = 1;
if (dy < 0)
ydir = 0;
else
ydir = 1;
pALastX = pACurrentX;
pALastY = pACurrentY;
MoveOffsetXY(Math.abs(dx), Math.abs(dy), xdir, ydir);
}
}
}
/************************************************************************************************************************************************/