You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

566 lines
16 KiB

var g_iCutType = "1";
var g_iCamIdx = "0";
var g_bIsIE = false;
var g_iAngle = 0;
var g_fileList = "";
var g_timer = null;
var g_iAutoPreCode = "0";
var websocket;
var connected = false;
/**
* 初始化webSocket连接
* @param callback
* @param value
* @constructor
*/
function ConnectServer(callback, value) {
if ("WebSocket" in window) {
websocket = new WebSocket(g_strWebsocketServerPath);
} else if (window.WebSocket) {
websocket = new WebSocket(g_strWebsocketServerPath);
} else if ("MozWebSocket" in window) {
websocket = new MozWebSocket(g_strWebsocketServerPath);
} else {
alert("浏览器版本太低!请使用Chrome、Firefox、IE10+浏览器!");
}
websocket.onopen = function () {
connected = true;
callback(value);
}
websocket.onclose = function (e) {
connected = false;
}
websocket.onmessage = function (e) {
onMessage(e);
}
websocket.onerror = function (e) {
alert("未连接websocket服务器,请确保已运行服务端!!!!");
};
}
/**
* 接收服务器消息
* @param e
*/
function onMessage(e) {
var jsonObj =JSON.parse(e.data);
// if(0 != jsonObj.code)
// {
// document.getElementById("result").innerHTML = "发生错误:" + jsonObj.message + "(" + jsonObj.code + ")";
// }
// else
// {
// document.getElementById("result").innerHTML = "请求成功";
// }
if(jsonObj.function == "video_stream")
{
document.getElementById("img_video_preview").src= "data:image/gif;base64," + jsonObj.image_base64;
}
if(jsonObj.function == "grab_image")
{
if(jsonObj.code != 0)
{
document.getElementById("result").innerHTML = "拍照失败,错误代码:" + jsonObj.code + ",返回信息 = " + jsonObj.message;
}
else
{
document.getElementById("result").innerHTML = "图像数量:" + jsonObj.image_count;
var images = jsonObj.images;
var iCount = jsonObj.image_count;
var strImageList = "";
for(var i = 0; i < iCount; i++)
{
AddImageToList(jsonObj.images[i]);
}
}
}
if(jsonObj.function == "get_resolution")
{
if(jsonObj.code != 0)
{
document.getElementById("result").innerHTML = "获取分辨率失败,错误代码 = " + jsonObj.code + ",错误信息 = " + jsonObj.message;
}
else
{
var select = document.getElementById("resolution");
//获取select下拉框下所有的选项
while(select.options.length > 0)
{
select.remove(i);
}
var arrays = jsonObj.resolution.split("|");
for(var i=0; i<arrays.length; i++)
{
select.options.add(new Option(arrays[i], arrays[i]));
}
document.getElementById("result").innerHTML = "获取分辨率成功";
}
}
if(jsonObj.function == "set_resolution")
{
document.getElementById("result").innerHTML = "设置分辨率,返回代码 = " + jsonObj.code + ",返回信息 = " + jsonObj.message;
}
}
/**
* 向服务器发送信息的共享方法
* @param jsonStr
*/
function sendMessage(jsonStr) {
connected ? websocket.send(jsonStr) : alert("未连接websocket服务器,请确保已运行服务端!");
}
function Rotate()
{
// g_iAngle += 90;
// g_iAngle = g_iAngle % 360;
$("#img_video_preview").rotate(90);
// $('.xform').each(function(idx,el) {
// el.className = "xform x" + "-rotated-" + g_iAngle;
// });
// if (g_iAngle % 180) {
// $('.xform-p').addClass('rotated');
// } else {
// $('.xform-p').removeClass('rotated');
// }
}
/////////////////////////// 初始化、卸载 ///////////////////////////
function Init()
{
OpenCamera();
// SetAutoCut(true);
}
function Release()
{
}
/////////////////////////// 初始化、卸载 ///////////////////////////
function OpenCamera()
{
var camradio = document.getElementsByName("camidx");
for(i=0; i<camradio.length; i++)
{
if(camradio[i].checked)
g_iCamIdx = camradio[i].value;
}
var data = "{\"function\": \"open_camera\", \"camidx\": \"" + g_iCamIdx.toString() + "\"}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
setTimeout( function(){
GetResolutionList();
}, 1000 );//延迟1000毫秒
}
function CloseDevice()
{
var data = "{\"function\": \"close_camera\", \"camidx\": \"" + g_iCamIdx.toString() + "\"}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
function GrabImage()
{
var strStorageInfo = "{ \"xdpi\":\"200\", \"ydpi\":\"200\", \"jpg_quality\":\"60\" }";
var strImageProcess = "{\"cut_type\":\"" + g_iCutType + "\", \"multi_object\":\"0\", \"rotate\":\"" + g_iAngle.toString() + "\"}";
var params = "{\"camidx\":\"" + g_iCamIdx.toString() + "\",\"make_uuid\":\"1\",\"image_storage_info\":" + strStorageInfo + ",\"image_process_info\":" + strImageProcess + "}";
var data = "{\"function\": \"grab_image\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
/////////////////////////// 分辨率 ///////////////////////////
function GetResolutionList()
{
var params = "{\"type\": \"resolution\",\"camidx\":\"" + g_iCamIdx.toString() + "\"}";
var data = "{\"function\": \"get_resolution\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
function SetResolution()
{
var select = document.getElementById("resolution");
var index = select.selectedIndex;
var text = select.options[index].text
var splits = text.split("x");
var params = "{\"resolution\": {\"width\":\"" + splits[0] + "\",\"height\":\"" + splits[1] + "\"},\"camidx\":\"" + g_iCamIdx.toString() + "\"}";
var data = "{\"function\": \"set_resolution\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
/////////////////////////// 切边 ///////////////////////////
function SetAutoCut(bAuto)
{
g_iCutType = bAuto ? 1 : 0;
var params = "{\"cutpage\":\"" + (g_iCutType ? "true" : "false") + "\"}";//
var data = "{\"function\": \"set_cutpage\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
/////////////////////////// 拍照、连拍 ///////////////////////////
function AddImageToList(image)
{
// if(typeof(image.base64) == "undefined")
// return;
// /// 首次添加的时,把列表中示意的空图像移除掉
// if(g_fileList == "")
// document.getElementById("image_list_div").innerHTML = "";
// if(typeof(image.uuid) != "undefined")
// {
// var uuid = image.uuid;
// if(g_fileList == "")
// {
// g_fileList = "{\"uuid\":\"" + uuid.toString() + "\"}";
// }
// else
// {
// g_fileList = g_fileList + ",{\"uuid\":\"" + uuid.toString() + "\"}";
// }
// }
// var strImageList = "<img src=\"data:image/jpg;base64," + image.base64 + "\" class=\"new_image\" />";
// if(typeof(image.filepath) != "undefined")
// {
// strImageList += "<br/><a target=_blank href=\"file:///" + image.filepath + "\">点击查看本地文件</a>";
// }
// document.getElementById("image_list_div").innerHTML = strImageList + document.getElementById("image_list_div").innerHTML;
}
function BeginTimer()
{
if(g_timer == null)
{
g_timer = setInterval("GetDocumentStatus()", 500);
}
}
function StartAutoCapture()
{
document.getElementById("result").innerHTML = "开始自动连拍......";
var params = "{\"action\": \"start\"}";//
var data = "{\"function\": \"set_cutpage\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
function StopAutoCapture()
{
document.getElementById("result").innerHTML = "停止自动连拍";
var params = "{\"action\": \"stop\"}";//
var data = "{\"function\": \"set_cutpage\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
function GetDocumentStatus()
{
var params = "{\"action\": \"status\"}";
var data = "{\"function\": \"detect_doc\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
/////////////////////////// 合并、清空 ///////////////////////////
function CleanImageList(bShowNullImage)
{
g_fileList = "";
document.getElementById("result").innerHTML = "";
if(!bShowNullImage)
return;
/// 填充空白的示意图
var strImage = "<img class=\"new_image\" src=\"null_image.png\">";
var strImages = "";
for(var i = 0; i < 3; i++)
{
strImages += strImage;
}
document.getElementById("image_list_div").innerHTML = strImages;
}
function ShowMergedResult(data)
{
CleanImageList(false);
if(typeof(data.image) != "undefined")
{
AddImageToList(data.image);
document.getElementById("image_list_div").innerHTML = "<br/>合并结果:<br/>" + document.getElementById("image_list_div").innerHTML;
}
else if(typeof(data.filepath) != "undefined")
{
var strResult = "<a target=_blank href=\"" + data.filepath + "\">点击此处,查看合并结果</a>";
document.getElementById("result").innerHTML = strResult;
document.getElementById("image_list_div").innerHTML = "<br/>" + strResult;
}
else
{
document.getElementById("result").innerHTML = "显示合并结果错误";
}
/// 清理掉,下次拍照的时候,会自动清空合并的结果
g_fileList = "";
}
function MergeImage(iMergeType)
{
document.getElementById("result").innerHTML = "";
if (g_fileList == "")
{
document.getElementById("result").innerHTML = "图像列表为空";
return;
}
var strWatermark = "{ \"pos\":\"4\", \"content\":\"图像水印\", \"transparency\":\"128\", \"fontsize\":\"80\", \"color\":\"red\" }";
var strStorageInfo = "{ \"xdpi\":\"200\", \"ydpi\":\"200\", \"jpg_quality\":\"60\" }";
var params = "{\"merge_type\":\"" + iMergeType.toString() + "\", \"margin\":\"5\", \"align\":\"1\", \"make_uuid\":\"0\", \"source_images\":[" + g_fileList + "], \"image_storage_info\":" + strStorageInfo + ", \"watermark\":" + strWatermark + "}";
var data = "{\"function\": \"merge_images\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
function MergeTB()
{
MergeImage(1);
}
function MergeLR()
{
MergeImage(0);
}
function MergeDocument(strDocument)
{
document.getElementById("result").innerHTML = "";
if (g_fileList == "")
{
document.getElementById("result").innerHTML = "图像列表为空";
return;
}
var params = "[" + g_fileList + "]";//
var data = "{\"function\": \"set_cutpage\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
function MergePDF()
{
MergeDocument("pdf");
}
function MergeOFD()
{
MergeDocument("ofd");
}
/////////////////////////// 设备状态、关闭设备 ///////////////////////////
function GetVideoStatus()
{
document.getElementById("result").innerHTML = "";
var params = "";
var data = "{\"function\": \"get_status\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}
/////////////////////////// 接口调用测试 ///////////////////////////
function PostToService()
{
document.getElementById("result").innerHTML = "";
var params = document.getElementById("para_input").value;
connected ? sendMessage(params) : ConnectServer(sendMessage, params);
}
/////////////////////////////////----------------/////////////////////////////////
///////////////////////////////// 自定义切边专区 /////////////////////////////////
/////////////////////////////////----------------/////////////////////////////////
var g_startPageX;
var g_startPageY;
var g_startImgX;
var g_startImgY;
var g_bPressed;
function InitForCustomCut()
{
g_bIsIE = IsIE();
if(g_bIsIE) //ie浏览器
{
var ui = document.getElementById("img_video_preview");
ui.style.display="none";
ui.style.visibility="hidden";
showVideoOcx.StartPreview(0);
}
else
{
var ui = document.getElementById("ocx_div");
ui.style.display="none";
ui.style.visibility="hidden";
}
OpenCamera();
SetAutoCut(false);
reset_custom_rect();
g_iCutType = "2";
if(g_bIsIE)
{
showVideoOcx.SetCustomCut(true);
}
}
function GetCustomCutPos()
{
var rect = showVideoOcx.GetCustomCutPos();
document.getElementById("custom_rect_input").value = rect;
}
function CatchGetCustomCutRect(szPos)
{
document.getElementById("custom_rect_input").value = szPos;
}
function DetectZoom ()
{
var ratio = 0;
screen = window.screen;
ua = navigator.userAgent.toLowerCase();
if (window.devicePixelRatio !== undefined)
{
ratio = window.devicePixelRatio;
}
else if (~ua.indexOf("msie"))
{
if (screen.deviceXDPI && screen.logicalXDPI)
{
ratio = screen.deviceXDPI / screen.logicalXDPI;
}
}
else if (window.outerWidth !== undefined && window.innerWidth !== undefined)
{
ratio = window.outerWidth / window.innerWidth;
}
if (ratio)
ratio = Math.round(ratio * 100);
return ratio;
};
function custom_rect_mouse_down(event)
{
if(g_bPressed)
return;
if(event.button != 2)
return;
reset_custom_rect();
}
function reset_custom_rect()
{
document.getElementById("custom_rect").style.visibility = "hidden";
document.getElementById("custom_rect").style.width = "0px";
document.getElementById("custom_rect").style.height = "0px";
g_startPageX = 0;
g_startPageY = 0;
g_startImgX = 0;
g_startImgY = 0;
}
function stream_mouse_down(event)
{
if(g_iCutType != "2")
return;
if(event.button != 2)
return;
var iZoom = DetectZoom();
if(iZoom != 100)
{
alert("浏览器缩放比例(" + iZoom + ")不为100,手动切边无法正常使用");
return;
}
document.getElementById("custom_rect").style.position = "absolute";
document.getElementById("custom_rect").style.left = event.pageX + "px";
document.getElementById("custom_rect").style.top = event.pageY + "px";
document.getElementById("custom_rect").style.width = "0px";
document.getElementById("custom_rect").style.height = "0px";
document.getElementById("custom_rect").style.border = "3px solid #0000FF";
document.getElementById("custom_rect").style.visibility = "visible";
var steamElement = document.getElementById("img_video_preview");
g_startImgX = event.clientX - steamElement.x;
g_startImgY = event.clientY - steamElement.y;
g_startPageX = event.pageX;
g_startPageY = event.pageY;
g_bPressed = true;
}
function mouse_up(event)
{
g_bPressed = false;
var rectElement = document.getElementById("custom_rect");
var steamElement = document.getElementById("img_video_preview");
var left = g_startImgX / steamElement.width; left *= 100;
var top = g_startImgY / steamElement.height; top *= 100;
var right = (g_startImgX + parseInt(rectElement.style.width)) / steamElement.width; right *= 100;
var bottom = (g_startImgY + parseInt(rectElement.style.height)) / steamElement.height; bottom *= 100;
var jsRect = "{\"left\":\"" + left.toFixed(2) + "%\", \"top\":\"" + top.toFixed(2) + "%\", \"right\":\"" + right.toFixed(2) + "%\", \"bottom\":\"" + bottom.toFixed(2) + "%\"}";
document.getElementById("custom_rect_input").value = jsRect;
}
function mouse_move(event)
{
UpdateCustomRect();
}
function UpdateCustomRect()
{
if(!g_bPressed)
return;
var w = event.pageX - g_startPageX;
var h = event.pageY - g_startPageY;
document.getElementById("custom_rect").style.width = w + "px";
document.getElementById("custom_rect").style.height = h + "px";
}
function doNothing()
{
window.event.returnValue=false;
return false;
}
function GrabImage_CustomCut()
{
var jsCustomRect = ", \"custom_rect\":" + document.getElementById("custom_rect_input").value;
var strStorageInfo = "{ \"xdpi\":\"200\", \"ydpi\":\"200\", \"jpg_quality\":\"60\" }";
var strImageProcess = "{\"cut_type\":\"" + g_iCutType + "\", \"multi_object\":\"0\", \"rotate\":\"" + g_iAngle.toString() + "\"" + jsCustomRect + "}";
var params = "{\"camidx\":\"" + g_iCamIdx.toString() + "\",\"make_uuid\":\"1\",\"image_storage_info\":" + strStorageInfo + ",\"image_process_info\":" + strImageProcess + "}";
var data = "{\"function\": \"grab_image\", \"params\": " + params + "}";
connected ? sendMessage(data) : ConnectServer(sendMessage, data);
}