HGWebScan增加demo

This commit is contained in:
luoliangyi 2022-09-07 13:57:28 +08:00
parent aa20c3105b
commit 626a59e03f
27 changed files with 4070 additions and 16 deletions

View File

@ -365,7 +365,7 @@ void WebUser::GetDeviceList(cJSON* json)
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "Func", cJSON_CreateString("GetDeviceList"));
cJSON_AddItemToObject(retJson, "code", cJSON_CreateNumber(0));
cJSON_AddItemToObject(retJson, "code", cJSON_CreateString("0"));
cJSON* array = cJSON_CreateArray();
cJSON_AddItemToObject(retJson, "result", array);
@ -374,7 +374,9 @@ void WebUser::GetDeviceList(cJSON* json)
for (int i = 0; i < (int)m_devNameList.size(); ++i)
{
cJSON* js = cJSON_CreateObject();
cJSON_AddItemToObject(js, "index", cJSON_CreateNumber(i));
char str[10] = {0};
sprintf(str, "%d", i);
cJSON_AddItemToObject(js, "index", cJSON_CreateString(str));
cJSON_AddItemToObject(js, "name", cJSON_CreateString(m_devNameList[i].c_str()));
cJSON_AddItemToArray(array, js);
}
@ -398,7 +400,7 @@ void WebUser::SelectDevice(cJSON* json)
int code = -1;
std::string result = "错误";
int index = GetJsonIntValue(json, "arg");
int index = atoi(GetJsonStringValue(json, "arg").c_str());
HGBase_EnterLock(m_lockName);
if (index >= 0 && index < (int)m_devNameList.size())
@ -446,7 +448,9 @@ void WebUser::SelectDevice(cJSON* json)
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "Func", cJSON_CreateString("SelectDevice"));
cJSON_AddItemToObject(retJson, "code", cJSON_CreateNumber(code));
char str[10] = { 0 };
sprintf(str, "%d", code);
cJSON_AddItemToObject(retJson, "code", cJSON_CreateString(str));
cJSON_AddItemToObject(retJson, "result", cJSON_CreateString(StdStringToUtf8(result).c_str()));
char* resp = cJSON_Print(retJson);
@ -467,7 +471,7 @@ void WebUser::SetScanColorType(cJSON* json)
int code = -1;
std::string result = "错误";
int colorMode = GetJsonIntValue(json, "arg");
int colorMode = atoi(GetJsonStringValue(json, "arg").c_str());
if (NULL != m_devHandle && NULL == m_scanEvent && colorMode >= 1 && colorMode <= 3)
{
@ -488,7 +492,9 @@ void WebUser::SetScanColorType(cJSON* json)
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "Func", cJSON_CreateString("SetScanColorType"));
cJSON_AddItemToObject(retJson, "code", cJSON_CreateNumber(code));
char str[10] = { 0 };
sprintf(str, "%d", code);
cJSON_AddItemToObject(retJson, "code", cJSON_CreateString(str));
cJSON_AddItemToObject(retJson, "result", cJSON_CreateString(StdStringToUtf8(result).c_str()));
char* resp = cJSON_Print(retJson);
@ -509,7 +515,7 @@ void WebUser::SetDPI(cJSON* json)
int code = -1;
std::string result = "错误";
int dpi = GetJsonIntValue(json, "arg");
int dpi = atoi(GetJsonStringValue(json, "arg").c_str());
if (NULL != m_devHandle && NULL == m_scanEvent && dpi > 0)
{
@ -525,7 +531,9 @@ void WebUser::SetDPI(cJSON* json)
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "Func", cJSON_CreateString("SetDPI"));
cJSON_AddItemToObject(retJson, "code", cJSON_CreateNumber(code));
char str[10] = { 0 };
sprintf(str, "%d", code);
cJSON_AddItemToObject(retJson, "code", cJSON_CreateString(str));
cJSON_AddItemToObject(retJson, "result", cJSON_CreateString(StdStringToUtf8(result).c_str()));
char* resp = cJSON_Print(retJson);
@ -546,7 +554,7 @@ void WebUser::SetDuplex(cJSON* json)
int code = -1;
std::string result = "错误";
int duplexMode = GetJsonIntValue(json, "arg");
int duplexMode = atoi(GetJsonStringValue(json, "arg").c_str());
if (NULL != m_devHandle && NULL == m_scanEvent && duplexMode >= 0 && duplexMode <= 1)
{
@ -565,7 +573,9 @@ void WebUser::SetDuplex(cJSON* json)
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "Func", cJSON_CreateString("SetDuplex"));
cJSON_AddItemToObject(retJson, "code", cJSON_CreateNumber(code));
char str[10] = { 0 };
sprintf(str, "%d", code);
cJSON_AddItemToObject(retJson, "code", cJSON_CreateString(str));
cJSON_AddItemToObject(retJson, "result", cJSON_CreateString(StdStringToUtf8(result).c_str()));
char* resp = cJSON_Print(retJson);
@ -586,7 +596,7 @@ void WebUser::SetScanJPGQuality(cJSON* json)
int code = -1;
std::string result = "错误";
int jpegQuality = GetJsonIntValue(json, "arg");
int jpegQuality = atoi(GetJsonStringValue(json, "arg").c_str());
if (NULL == m_scanEvent && jpegQuality >= 0 && jpegQuality <= 100)
{
@ -599,7 +609,9 @@ void WebUser::SetScanJPGQuality(cJSON* json)
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "Func", cJSON_CreateString("SetScanJPGQuality"));
cJSON_AddItemToObject(retJson, "code", cJSON_CreateNumber(code));
char str[10] = { 0 };
sprintf(str, "%d", code);
cJSON_AddItemToObject(retJson, "code", cJSON_CreateString(str));
cJSON_AddItemToObject(retJson, "result", cJSON_CreateString(StdStringToUtf8(result).c_str()));
char* resp = cJSON_Print(retJson);
@ -620,7 +632,7 @@ void WebUser::StartScan(cJSON* json)
int code = -1;
std::string result = "错误";
int scanPage = GetJsonIntValue(json, "arg");
int scanPage = atoi(GetJsonStringValue(json, "arg").c_str());
if (NULL != m_devHandle && NULL == m_scanEvent && scanPage >= 0)
{
@ -654,7 +666,9 @@ void WebUser::StartScan(cJSON* json)
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "Func", cJSON_CreateString("StartScan"));
cJSON_AddItemToObject(retJson, "code", cJSON_CreateNumber(code));
char str[10] = { 0 };
sprintf(str, "%d", code);
cJSON_AddItemToObject(retJson, "code", cJSON_CreateString(str));
cJSON_AddItemToObject(retJson, "result", cJSON_CreateString(StdStringToUtf8(result).c_str()));
char* resp = cJSON_Print(retJson);
@ -1092,7 +1106,9 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "Func", cJSON_CreateString("ScanComplete"));
cJSON_AddItemToObject(retJson, "code", cJSON_CreateNumber(code));
char str[10] = { 0 };
sprintf(str, "%d", code);
cJSON_AddItemToObject(retJson, "code", cJSON_CreateString(str));
cJSON_AddItemToObject(retJson, "result", cJSON_CreateString(StdStringToUtf8(result).c_str()));
char* resp = cJSON_Print(retJson);
@ -1150,7 +1166,9 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "Func", cJSON_CreateString("ImageSaveDone"));
cJSON_AddItemToObject(retJson, "code", cJSON_CreateNumber(code));
char str[10] = { 0 };
sprintf(str, "%d", code);
cJSON_AddItemToObject(retJson, "code", cJSON_CreateString(str));
cJSON_AddItemToObject(retJson, "result", cJSON_CreateString(StdStringToUtf8(result).c_str()));
char* resp = cJSON_Print(retJson);

8
test/webscan/demo/.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/demo.iml" filepath="$PROJECT_DIR$/.idea/demo.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
</set>
</option>
</component>
</project>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #eee;border-left-width:6px;background-color:#FAFAFA;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:40px;line-height:40px;border-bottom:1px solid #eee}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 10px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view .layui-code-ol li:first-child{padding-top:10px}.layui-code-view .layui-code-ol li:last-child{padding-bottom:10px}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}.layui-code-demo .layui-code{visibility:visible!important;margin:-15px;border-top:none;border-right:none;border-bottom:none}.layui-code-demo .layui-tab-content{padding:15px;border-top:none}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,262 @@
//高拍仪与身份证读卡器设备
var ws_gpysfz={
type:1,
port:9456,
text:"高拍仪与身份证识读机",
url:"ws://127.0.0.1:9456/",
ws:null,
connected:false
};
//手写签名设备
var ws_sxsb={
type:2,
port:9457,
text:"手写签名",
url:"ws://127.0.0.1:9457/",
ws:null,
connected:false
};
//扫描仪设备
var ws_smy={
type:3,
port:9458,
text:"扫描设备",
url:"ws://127.0.0.1:9458/",
ws:null,
connected:false
};
//日志输出
function addlog(obj){
console.log(obj);
if(typeof(obj)=="string" && typeof(addDebugLog)!="undefined"){
addDebugLog(obj);
}
}
function sendWsData(ws,msg){
try{
var jsData = typeof(msg)=="string"?msg:JSON.stringify(msg);
if(typeof(addSendLog)!="undefined"){
addSendLog(jsData);
}
ws.send(jsData);
return true;
}
catch(e){
addlog("发送 " + msg + " 消息失败");
addlog(e);
return false;
}
}
function sendMessage(obj,msg){
var bRet=false;
if(obj.ws!=null&&obj.ws.readyState==1){
bRet = sendWsData(obj.ws,msg);
}
else{
addlog(obj.url + " 未连接成功!");
}
return bRet;
}
//发送高拍仪身份证消息
function sendGpySfzMessage(msg){
return sendMessage(ws_gpysfz,msg);
}
//发送手写签名消息
function sendSxqmMessage(msg){
return sendMessage(ws_sxsb,msg);
}
//发送扫描仪消息
function sendSmyMessage(msg){
return sendMessage(ws_smy,msg);
}
//接收消息 自动调用 processMessage 函数
function recvMessage(msg){
if(typeof(processMessage)!="undefined"){
processMessage(msg);
}
}
function onUpdateStatus(t,p,f){
if(typeof(updateStatus)!="undefined"){
updateStatus(t,p,f);
}
}
//初始化WebSocket连接
function ConnectServer(device) {
try{
device.connected = false;
if ('WebSocket' in window || window.WebSocket) {
device.ws = new WebSocket(device.url);
}
else if ('MozWebSocket' in window) {
device.ws = new MozWebSocket(device.url);
}
else {
alert("浏览器版本太低请使用Chrome、Firefox浏览器");
return;
}
if(device.ws!=null){
device.ws.onopen = function () {
device.connected = true;
onUpdateStatus(device.type,device.port,true);
}
device.ws.onclose = function (e) {
device.connected = false;
onUpdateStatus(device.type,device.port,false);
}
device.ws.onmessage = function (e) {
var txt = "";
if (typeof (e.data) == "string") {
txt = e.data;
}
else{
try {
txt = JSON.stringify(e.data);
}
catch (e){
txt = "";
addlog("数据解析失败!");
addlog(e);
}
}
if(txt!="") {
recvMessage(txt);
}
}
device.ws.onerror = function (e) {
addlog(e);
};
device.ws.open();//连接 websocket
addlog(device.url+" 初始化完成!");
}
else{
onUpdateStatus(device.type,device.port,false);
addlog(device.url+" 初始化失败!");
}
}
catch(e){
addlog(device.url+" 连接失败!");
addlog(e);
}
}
//初始化司法厅设备
function InitDevice(){
ConnectServer(ws_gpysfz);
ConnectServer(ws_sxsb);
ConnectServer(ws_smy);
}
//高拍仪接口函数
//发送获取视频设备列表消息
function SendGetVideoDevices(){
return sendGpySfzMessage({"Func":"GetVideoDevices","arg":"0"});
}
//发送获取音频设备列表消息
function SendGetAudioDevices(){
return sendGpySfzMessage({"Func":"GetAudioDevices","arg":"0"});
}
//发送获取分辨率列表消息
function SendGetResolution(index){
return sendGpySfzMessage({"Func":"GetResolution","arg":""+index});
}
//发送切换视频分辨率消息
function SendChangeVideoResolution(index){
return sendGpySfzMessage({"Func":"ChangeVideoResolution","arg":""+index});
}
//发送打开指定视频消息
function SendStartVideo(index){
return sendGpySfzMessage({"Func":"StartVideo","arg":""+index});
}
//发送打开主视频消息
function SendStartRunMain(){
return sendGpySfzMessage({"Func":"StartRunMain","arg":"0"});
}
//发送打开副视频消息
function SendStartRunSub(){
return sendGpySfzMessage({"Func":"StartRunSub","arg":"0"});
}
//发送关闭视频消息
function SendStopVideo(){
return sendGpySfzMessage({"Func":"StopVideo","arg":"0"});
}
//发送文件方式拍照消息
function SendCaptureFile(filename){
return sendGpySfzMessage({"Func":"CaptureFile","arg":""+filename});
}
//发送Base64方式拍照消息
function SendCaptureBase64(format){
return sendGpySfzMessage({"Func":"CaptureBase64","arg":""+format});
}
//发送左旋转消息
function SendRotateLeft(angle){
return sendGpySfzMessage({"Func":"RotateLeft","arg":""+angle});
}
//发送右旋转消息
function SendRotateRight(angle){
return sendGpySfzMessage({"Func":"RotateRight","arg":""+angle});
}
//发送放大消息
function SendZoomIn(){
return sendGpySfzMessage({"Func":"ZoomIn","arg":"0"});
}
//发送缩小消息
function SendZoomOut(){
return sendGpySfzMessage({"Func":"ZoomOut","arg":"0"});
}
//发送切换裁剪方式消息
function SendChangeCutType(cutType){
return sendGpySfzMessage({"Func":"ChangeCutType","arg":""+cutType});
}
//发送设置色彩模式消息
function SendSetColorType(colorType){
return sendGpySfzMessage({"Func":"SetColorType","arg":""+colorType});
}
//发送设置JPG图片压缩率消息
function SendSetJPGQuality(quality){
return sendGpySfzMessage({"Func":"SetJPGQuality","arg":""+quality});
}
//身份证识读机接口函数
//发送读取身份证消息
function SendReadIDCard(){
return sendGpySfzMessage({"Func":"ReadIDCard","arg":"0"});
}
//手写签名设备接口函数
//发送开始签字消息
function SendStartSign(){
return sendSxqmMessage({"Func":"StartSign","arg":"0"});
}
//发送关闭签字消息
function SendCloseSign(){
return sendSxqmMessage({"Func":"CloseSign","arg":"0"});
}
//扫描设备接口函数
//发送获取所有SANE/twain源名称消息
function SendGetDeviceList(){
return sendSmyMessage({"Func":"GetDeviceList","arg":"0"});
}
//发送选择SANE/twain源名称消息
function SendSelectDevice(index){
return sendSmyMessage({"Func":"SelectDevice","arg":""+index});
}
//发送设置色彩模式消息
function SendSetScanColorType(colorType){
return sendSmyMessage({"Func":"SetScanColorType","arg":""+colorType});
}
//发送设置扫描分辨率消息
function SendSetDPI(dpi){
return sendSmyMessage({"Func":"SetDPI","arg":""+dpi});
}
//发送设置单双面消息
function SendSetDuplex(duplex){
return sendSmyMessage({"Func":"SetDuplex","arg":""+duplex});
}
//发送设置JPG图片压缩率消息
function SendSetScanJPGQuality(quality){
return sendSmyMessage({"Func":"SetScanJPGQuality","arg":""+quality});
}
//发送开始扫描消息
function SendStartScan(page){
return sendSmyMessage({"Func":"StartScan","arg":""+page});
}

View File

@ -0,0 +1,89 @@
@CHARSET "UTF-8";
* {
margin: 0;
padding: 0;
font-family: CESI仿宋-GB2312, CESI黑体-GB2312, CESI宋体-GB2312, CESI楷体-GB2312, CESI小标宋-GB2312, Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, "\5FAE\8F6F\96C5\9ED1", Arial, sans-serif;
font-size: 11px;
}
.title{
margin-top: 20px;
margin-bottom: 20px;
text-align: center;
}
.row-tools{
height: 40px;
}
.panel{
padding: 20px;
}
.inputtext{
width: 50px;
}
.sfz_head{
margin:0 auto;
width: 75px;
height: 100px;
background-color: white;
}
.img_head{
margin:0px;
padding: 0px;
width: 100%;
height: 100%;
background-color: black;
}
.sign_head{
margin:0 auto;
width: 150px;
height: 75px;
background-color: white;
}
.sign_pic{
margin:0px;
padding: 0px;
width: 100%;
height: 100%;
background-color: black;
}
.video{
margin:0 auto;
width: 640px;
height: 480px;
background-color: white;
}
.preview{
margin:0px;
padding: 0px;
width: 100%;
height: 100%;
background-color: black;
}
.message{
margin:0 auto;
width: 640px;
height: 480px;
background-color: white;
}
.msg{
margin:0px;
padding: 5px;
width: 630px;
height: 470px;
line-height: 16px;
color:black;
font-size: 14px;
background-color:lightgrey;
}

216
test/webscan/demo/test.html Normal file
View File

@ -0,0 +1,216 @@
<!DOCTYPE html>
<html lang="zh" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>四川省司法厅国产化设备兼容性测试Demo</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
<link rel="stylesheet" href="layui/css/layui.css"/>
<link rel="stylesheet" href="style.css"/>
<script src="layui/layui.js"></script>
<script src="sftdevice.js"></script>
<script src="test.js"></script>
</head>
<body>
<div class="layui-container">
<div class="layui-row">
<div class="layui-col-md12 layui-font-20 title">
四川省司法厅国产化设备兼容性测试Demo
</div>
</div>
<div class="layui-row">
<div class="layui-tab layui-tab-card">
<ul class="layui-tab-title">
<li class="layui-this">高拍仪</li>
<li>身份证识读机</li>
<li>手写签名</li>
<li>扫描设备</li>
</ul>
<div class="layui-tab-content" style="height: 150px;">
<div class="layui-tab-item layui-show">
<div class="panel">
<div class="layui-row row-tools">
<div id="gpy_status" class="layui-col-md2">  状态:未连接</div>
<div class="layui-col-md10">
视频设备列表:<select name="gpy_videos" id="gpy_videos" class="gpyobj"></select>
</div>
<!--
<div class="layui-col-md2">
音频设备列表:<select name="gpy_audios" id="gpy_audios" class="gpyobj"></select>
</div>
-->
</div>
<div class="layui-row row-tools">
<div class="layui-col-md2">
 分辨率:<select name="gpy_resolutions" id="gpy_resolutions" class="gpyobj"></select>
</div>
<div class="layui-col-md2">
   裁剪方式:<select name="gpy_cuttypes" id="gpy_cuttypes" class="gpyobj">
<option value="0">自动裁剪</option>
<option value="1">不裁剪</option>
</select>
</div>
<div class="layui-col-md2">
色彩模式:<select name="gpy_colortypes" id="gpy_colortypes" class="gpyobj">
<option value="1">彩色</option>
<option value="2">灰度</option>
<option value="3">黑白</option>
</select>
</div>
<div class="layui-col-md6">
 JPG压缩率<input type="text" name="gpy_jpgquality" id="gpy_jpgquality" class="inputtext gpyobj" value="90"/>
</div>
</div>
<div class="layui-row row-tools">
<div class="layui-col-md12">
<button type="button" id="StartVideo" name="StartVideo" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">打开指定视频</button>
<button type="button" id="StartRunMain" name="StartRunMain" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">打开主视频</button>
<button type="button" id="StartRunSub" name="StartRunSub" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">打开副视频</button>
<button type="button" id="StopVideo" name="StopVideo" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">关闭视频</button>
<button type="button" id="CaptureFile" name="CaptureFile" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">文件方式拍照</button>
<button type="button" id="CaptureBase64" name="CaptureBase64" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">Base64方式拍照</button>
<button type="button" id="RotateLeft" name="RotateLeft" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">左转</button>
<button type="button" id="RotateRight" name="RotateRight" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">右转</button>
<button type="button" id="ZoomIn" name="ZoomIn" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">放大</button>
<button type="button" id="ZoomOut" name="ZoomOut" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">缩小</button>
</div>
</div>
</div>
</div>
<div class="layui-tab-item">
<div class="panel">
<div class="layui-row row-tools">
<div id="sfz_status" class="layui-col-md2">状态:未连接</div>
<div class="layui-col-md10">
<button type="button" id="ReadIDCard" name="ReadIDCard" class="layui-btn layui-btn-radius layui-btn-sm gpyobj">读取身份证</button>
</div>
</div>
<div class="layui-row">
<div class="layui-col-md2">
<div class="sfz_head">
<img id="sfz_headpic" class="img_head"/>
</div>
</div>
<div class="layui-col-md10">
<div class="layui-row row-tools">
<div id="sfz_name" class="layui-col-md2">姓名:</div>
<div id="sfz_sex" class="layui-col-md2">性别:</div>
<div id="sfz_nation" class="layui-col-md2">  民族:</div>
<div id="sfz_birthdate" class="layui-col-md2">出生:</div>
<div id="sfz_id" class="layui-col-md4">公民身份号码:</div>
</div>
<div class="layui-row row-tools">
<div id="sfz_addr" class="layui-col-md4">地址:</div>
<div id="sfz_office" class="layui-col-md4">签发机关:</div>
<div id="sfz_date" class="layui-col-md4">  有效期限:</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-tab-item">
<div class="panel">
<div class="layui-row row-tools">
<div id="sign_status" class="layui-col-md12">状态:未连接</div>
</div>
<div class="layui-row row-tools">
<div class="layui-col-md2">
<button type="button" id="StartSign" name="StartSign" class="layui-btn layui-btn-radius layui-btn-sm signobj">开始签字</button>
<button type="button" id="CloseSign" name="CloseSign" class="layui-btn layui-btn-radius layui-btn-sm signobj">关闭签字</button>
</div>
<div class="layui-col-md10">
<div class="sign_head">
<img id="sign_pic" class="sign_pic"/>
</div>
</div>
</div>
</div>
</div>
<div class="layui-tab-item">
<div class="panel">
<div class="layui-row row-tools">
<div id="scan_status" class="layui-col-md2">    状态:未连接</div>
<div class="layui-col-md2">
   源名称:<select name="scan_devices" id="scan_devices" class="scanobj"></select>
</div>
<div class="layui-col-md2">
色彩模式:<select name="scan_colortypes" id="scan_colortypes" class="scanobj">
<option value="1">彩色</option>
<option value="2">灰度</option>
<option value="3">黑白</option>
</select>
</div>
<div class="layui-col-md2">
单双面:<select name="scan_duplex" id="scan_duplex" class="scanobj">
<option value="0">单面</option>
<option value="1">双面</option>
</select>
</div>
</div>
<div class="layui-row row-tools">
<div class="layui-col-md2">
 扫描分辨率:<input type="text" name="scan_dpi" id="scan_dpi" class="inputtext scanobj" value="100"/>
</div>
<div class="layui-col-md2">
 JPG压缩率<input type="text" name="scan_jpgquality" id="scan_jpgquality" class="inputtext scanobj" value="90"/>
</div>
<div class="layui-col-md8">
扫描页数:<input type="text" name="scan_pagesize" id="scan_pagesize" class="inputtext scanobj" value="0"/>
</div>
</div>
<div class="layui-row row-tools">
<div class="layui-col-md12">
<button type="button" id="StartScan" name="StartScan" class="layui-btn layui-btn-radius layui-btn-sm scanobj">扫描</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-tab layui-tab-card">
<ul class="layui-tab-title">
<li class="layui-this">视频预览</li>
<li>图片预览</li>
<li>运行日志</li>
<li>发送日志</li>
<li>接收日志</li>
</ul>
<div class="layui-tab-content" style="height: 480px;">
<div class="layui-tab-item layui-show">
<div class="video">
<img id="videopreview" class="preview"/>
</div>
</div>
<div class="layui-tab-item">
<div class="video">
<img id="imgpreview" class="preview"/>
</div>
</div>
<div class="layui-tab-item">
<div class="message">
<textarea id="msg_run" readonly class="msg"></textarea>
</div>
</div>
<div class="layui-tab-item">
<div class="message">
<textarea id="msg_send" readonly class="msg"></textarea>
</div>
</div>
<div class="layui-tab-item">
<div class="message">
<textarea id="msg_recv" readonly class="msg"></textarea>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

540
test/webscan/demo/test.js Normal file
View File

@ -0,0 +1,540 @@
//加入运行日志
function addDebugLog(msg){
var val = $("#msg_run").val();
val += "\r\n"+msg;
$("#msg_run").val(val);
}
//加入发送消息日志
function addSendLog(msg){
var val = $("#msg_send").val();
val += "\r\n"+msg;
$("#msg_send").val(val);
}
//加入接收消息日志
function addRecvLog(msg){
if(msg.indexOf("ShowVideo")<0){
var val = $("#msg_recv").val();
val += "\r\n"+msg;
$("#msg_recv").val(val);
}
}
function createSelectItem(objid,obj){
$(objid).empty();
try{
for(i=0;i<obj.result.length;i++){
s="<option value='"+obj.result[i].index+"'>"+obj.result[i].name+"</option>";
$(objid).append(s);
}
}
catch (e){
addDebugLog(e.message);
}
}
function getSelectIndex(objid) {
return $(objid).val();
}
function getSelectValue(objid) {
return $(objid).text();
}
//视频设备
function changeGpyVideos(){
var index = getSelectIndex("#gpy_videos");
if(index!="") {
SendGetResolution(index);
}
}
//分辨率
function changeResolution(){
var index = getSelectIndex("#gpy_resolutions");
if(index!="") {
SendChangeVideoResolution(index);
}
}
//裁剪方式
function changeCutType(){
var index = getSelectIndex("#gpy_cuttypes");
if(index!="") {
SendChangeCutType(index);
}
}
//色彩模式
function changeSetColorType(){
var index = getSelectIndex("#gpy_colortypes");
if(index!="") {
SendSetColorType(index);
}
}
//JPG压缩率
function changeSetJPGQuality(){
var val = $("#gpy_jpgquality").val();//JPG压缩率
if(val==""){
val = "90";
}
SendSetJPGQuality(val);
}
//扫描仪 源名称
function changeDevices(){
var index = getSelectName("#scan_devices");
if(index!="") {
SendSelectDevice(index);
}
}
//扫描仪 色彩模式
function changeSetScanColorType(){
var index = getSelectIndex("#scan_colortypes");
if(index!="") {
SendSetScanColorType(index);
}
}
//扫描仪 单双面
function changeDuplex(){
var index = getSelectIndex("#scan_duplex");
if(index!="") {
SendSetDuplex(index);
}
}
//扫描仪 扫描分辨率
function changeSetDPI(){
var val = $("#scan_dpi").val();
if(val==""){
val = "100";
}
SendSetDPI(index);
}
//扫描仪 JPG压缩率
function changeSetScanJPGQuality(){
var val = $("#scan_jpgquality").val();
if(val==""){
val = "90";
}
SendSetScanJPGQuality(val);
}
//显示图片
function showImage(id1,id2,obj){
try{
if(obj.code=="0") {
var base64 = obj.result;
if(base64!="") {
$(id1).attr("src", "data:image/jpeg;base64," + base64);
if(id2!=""){
$(id2).attr("src", "data:image/jpeg;base64," + base64);
}
}
}
}
catch (e){
addDebugLog(e.message);
}
}
//获取视频设备列表 请求返回
function GetVideoDevices(obj){
createSelectItem("#gpy_videos",obj);
//changeGpyVideos();
//changeCutType();
//changeSetColorType();
//changeSetJPGQuality();
}
//获取音频设备列表 请求返回
function GetAudioDevices(obj){
// createSelectItem("#gpy_audios",obj);
}
//获取分辨率列表 请求返回
function GetResolution(obj){
createSelectItem("#gpy_resolutions",obj);
changeResolution();
}
//切换视频分辨率 请求返回
function ChangeVideoResolution(obj){
}
//打开指定视频 请求返回
function StartVideo(obj){
}
//打开主视频 请求返回
function StartRunMain(obj){
}
//打开副视频 请求返回
function StartRunSub(obj){
}
//关闭视频 请求返回
function StopVideo(obj){
}
//文件方式拍照 请求返回
function CaptureFile(obj){
}
//Base64方式拍照 请求返回
function CaptureBase64(obj){
showImage("#imgpreview","",obj);
}
//左旋转 请求返回
function RotateLeft(obj){
}
//右旋转 请求返回
function RotateRight(obj){
}
//放大 请求返回
function ZoomIn(obj){
}
//缩小 请求返回
function ZoomOut(obj){
}
//切换裁剪方式 请求返回
function ChangeCutType(obj){
}
//设置色彩模式 请求返回
function SetColorType(obj){
}
//设置JPG图片压缩率 请求返回
function SetJPGQuality(obj){
}
//视频帧画面发送 请求返回
function ShowVideo(obj){
showImage("#videopreview","",obj);
}
//读取身份证 请求返回
function ReadIDCard(obj){
addDebugLog("返回读取身份证信息");
var base64 = "";
try{
if(obj.code=="0") {
$("#sfz_name").text("姓名:"+obj.result.Name);
$("#sfz_sex").text("性别:"+obj.result.Sex);
$("#sfz_nation").text("  民族:"+obj.result.Nation);
$("#sfz_birthdate").text("出生:"+obj.result.BirthDate);
$("#sfz_addr").text("地址:"+obj.result.Addr);
$("#sfz_id").text("公民身份号码:"+obj.result.ID);
$("#sfz_office").text("签发机关:"+obj.result.Office);
$("#sfz_date").text("  有效期限:"+(obj.result.EndDate=="99999999"?"长期":obj.result.BeginDate + " - "+ obj.result.EndDate));
base64 = obj.result.HeadPic;
if(base64!="") {
$("#sfz_headpic").attr("src", "data:image/jpeg;base64," + base64);
}
}
}
catch (e){
addDebugLog(e.message);
}
}
//开始签字 请求返回
function StartSign(obj){
addDebugLog("签名返回");
showImage("#sign_pic","#imgpreview",obj);
}
//关闭签字 请求返回
function CloseSign(obj){
}
//获取所有SANE/twain源名称 请求返回
function GetDeviceList(obj){
createSelectItem("#scan_devices",obj);
}
//选择SANE/twain源 请求返回
function SelectDevice(obj){
}
//设置色彩模式 请求返回
function SetScanColorType(obj){
}
//设置分辨率 请求返回
function SetDPI(obj){
}
//设置单双面 请求返回
function SetDuplex(obj){
}
//设置JPG图片压缩率 请求返回
function SetScanJPGQuality(obj){
}
//开始扫描 请求返回
function StartScan(obj){
}
//每张图片保存完成后此返回消息 请求返回
function ImageSaveDone(obj){
addDebugLog("返回一页扫描图片");
showImage("#imgpreview","",obj);
}
//本次扫描完成返回此消息 请求返回
function ScanComplete(obj){
addDebugLog("扫描完成");
}
//处理接收的消息
function processMessage(msg){
addRecvLog(msg);
var obj = null;
var func = "";
try {
msg = "(" + msg + ")";
obj = eval(msg);
func = obj.Func;
}
catch (e){
addDebugLog("解析数据失败");
return false;
}
console.log("Func="+func);
switch (func) {
case "GetVideoDevices"://获取视频设备列表
GetVideoDevices(obj);
break;
case "GetAudioDevices"://获取音频设备列表
GetAudioDevices(obj);
break;
case "GetResolution"://获取分辨率列表
GetResolution(obj);
break;
case "ChangeVideoResolution"://切换视频分辨率
ChangeVideoResolution(obj);
break;
case "StartVideo"://打开指定视频
StartVideo(obj);
break;
case "StartRunMain"://打开主视频
StartRunMain(obj);
break;
case "StartRunSub"://打开副视频
StartRunSub(obj);
break;
case "StopVideo"://关闭视频
StopVideo(obj);
break;
case "CaptureFile"://文件方式拍照
CaptureFile(obj);
break;
case "CaptureBase64"://Base64方式拍照
CaptureBase64(obj);
break;
case "RotateLeft"://左旋转
RotateLeft(obj);
break;
case "RotateRight"://右旋转
RotateRight(obj);
break;
case "ZoomIn"://放大
ZoomIn(obj);
break;
case "ZoomOut"://缩小
ZoomOut(obj);
break;
case "ChangeCutType"://切换裁剪方式
ChangeCutType(obj);
break;
case "SetColorType"://设置色彩模式
SetColorType(obj);
break;
case "SetJPGQuality"://设置JPG图片压缩率
SetJPGQuality(obj);
break;
case "ShowVideo"://视频帧画面发送
ShowVideo(obj);
break;
case "ReadIDCard"://读取身份证
ReadIDCard(obj);
break;
case "StartSign"://开始签字
StartSign(obj);
break;
case "CloseSign"://关闭签字
CloseSign(obj);
break;
case "GetDeviceList"://获取所有SANE/twain源名称
GetDeviceList(obj);
break;
case "SelectDevice"://选择SANE/twain源
SelectDevice(obj);
break;
case "SetScanColorType"://设置色彩模式
SetScanColorType(obj);
break;
case "SetDPI"://设置分辨率
SetDPI(obj);
break;
case "SetDuplex"://设置单双面
SetDuplex(obj);
break;
case "SetScanJPGQuality"://设置JPG图片压缩率
SetScanJPGQuality(obj);
break;
case "StartScan"://开始扫描
StartScan(obj);
break;
case "ImageSaveDone"://每张图片保存完成后此返回消息
ImageSaveDone(obj);
break;
case "ScanComplete"://本次扫描完成返回此消息
ScanComplete(obj);
break;
}
return true;
}
//连接状态更新
function updateStatus(t,p,f){
var status = f?"已连接":"连接失败";
var flag = f?"false":"true";
var objid="";
addDebugLog("端口号 "+p+" "+status);
if(t==1){
$("#gpy_status").text("  状态:"+status);
$("#sfz_status").text("状态:"+status);
objid = ".gpyobj";
if(f){
SendGetVideoDevices();//获取视频设备列表消息
//SendGetAudioDevices();//获取音频设备列表消息
}
}
else if(t==2){
$("#sign_status").text("状态:"+status);
objid = ".signobj";
}
else if(t==3){
$("#scan_status").text("    状态:"+status);
objid = ".scanobj";
if(f){
SendGetDeviceList();//获取所有SANE/twain源名称消息
}
}
//$(objid).attr("disabled",flag);
}
function bindClick(){
//打开指定视频
$("#StartVideo").click(function (e) {
var index = getSelectIndex("#gpy_videos");
if(index!=""){
SendStartVideo(index);
}
});
//打开主视频
$("#StartRunMain").click(function (e) {
SendStartRunMain();
});
//打开副视频
$("#StartRunSub").click(function (e) {
SendStartRunSub();
});
//关闭视频
$("#StopVideo").click(function (e) {
SendStopVideo();
});
//文件方式拍照
$("#CaptureFile").click(function (e) {
SendCaptureFile("c:\test.jpg");
});
//Base64方式拍照
$("#CaptureBase64").click(function (e) {
SendCaptureBase64();
});
//左转
$("#RotateLeft").click(function (e) {
SendRotateLeft("30");
});
//右转
$("#RotateRight").click(function (e) {
SendRotateRight("30");
});
//放大
$("#ZoomIn").click(function (e) {
SendZoomIn();
});
//缩小
$("#ZoomOut").click(function (e) {
SendZoomOut();
});
//读取身份证
$("#ReadIDCard").click(function (e) {
SendReadIDCard();
});
//开始签字
$("#StartSign").click(function (e) {
SendStartSign();
});
//关闭签字
$("#CloseSign").click(function (e) {
SendCloseSign();
});
//开始扫描
$("#StartScan").click(function (e) {
var page = $("#scan_pagesize").val();
if(page==""){
page = "0";
}
SendStartScan(page);
});
//视频设备
$("#gpy_videos").change(function (e) {
//changeGpyVideos();
});
//分辨率
$("#gpy_resolutions").change(function (e) {
changeResolution();
});
//裁剪方式
$("#gpy_cuttypes").change(function (e) {
changeCutType();
});
//色彩模式
$("#gpy_colortypes").change(function (e) {
changeSetColorType();
});
//JPG压缩率
$("#gpy_jpgquality").change(function (e) {
changeSetJPGQuality();
});
//扫描仪 源名称
$("#scan_devices").change(function (e) {
changeDevices();
});
//扫描仪 色彩模式
$("#scan_colortypes").change(function (e) {
changeSetScanColorType();
});
//扫描仪 单双面
$("#scan_duplex").change(function (e) {
changeDuplex();
});
//扫描仪 扫描分辨率
$("#scan_dpi").change(function (e) {
changeSetDPI();
});
//扫描仪 JPG压缩率
$("#scan_jpgquality").change(function (e) {
changeSetScanJPGQuality();
});
}
$(document).ready(function () {
//初始化websocket
InitDevice();
bindClick();
});

View File

@ -0,0 +1 @@
"{"Func":"Connect","code":"0","result":1}"