REV:拍照抓图

This commit is contained in:
2025-12-03 12:13:39 +08:00
parent 1b0f58ca26
commit 03f58fb220

View File

@@ -8,6 +8,10 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.io.File;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@Service
@Slf4j
@@ -91,81 +95,59 @@ public class HikvisionSnapshotUtil {
public short wPicQuality;
}
//HCNetSDK 抓图,图片路径允许指定,不指定则走配置
public static SdkResponse 截图(String imageName) {
String imagePath = "D://vehicle/" + DateUtil.thisYear();
public static void sync截图(String imageName, String taskCode) {
if (StringUtils.isEmpty(imageName)) {
return SdkResponse.requestFail("图片名称未");
log.warn("图片名称未定义");
return;
}
String sFileUrl = imagePath + "\\" + imageName;
if (!HCNetSDK.INSTANCE.NET_DVR_Init()) {
return SdkResponse.requestFail("[SDK] 初始化失败");
LocalDate now = LocalDate.now();
String datePath = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
String imagePath = "C:" + File.separator + "software" + File.separator + "wms" + File.separator + "images" + File.separator + datePath;
File dir = new File(imagePath);
if (!dir.exists()) {
dir.mkdirs();
}
String sFileUrl = imagePath + File.separator + imageName + "_" + taskCode + ".jpg";
if (!HCNetSDK.INSTANCE.NET_DVR_Init()) {
log.warn("[SDK] 初始化失败");
return;
}
NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();
int userId = HCNetSDK.INSTANCE.NET_DVR_Login_V30(ip, port, username, password, deviceInfo);
if (userId < 0) {
System.err.println("[SDK] 登录失败");
log.warn("[SDK] 登录失败");
HCNetSDK.INSTANCE.NET_DVR_Cleanup();
return SdkResponse.requestFail("[SDK] 登录失败");
return;
}
NET_DVR_JPEGPARA jpegPara = new NET_DVR_JPEGPARA();
// D1
jpegPara.wPicSize = 2;
// 一般质量
jpegPara.wPicQuality = 0;
//命名规则:任务号+载具号+时间.jpg
boolean result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl);
if (!result) {
result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl);
try {
boolean result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl);
if (result) {
System.out.println("[SDK] 抓图成功,保存为 snapshot_sdk.jpg");
log.info("[SDK] 抓图成功: " + sFileUrl);
} else {
System.err.println("[SDK] 抓图失败");
// 失败重试一次
result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl);
if (result) {
log.info("[SDK] 抓图成功(第二次尝试): " + sFileUrl);
} else {
log.warn("[SDK] 抓图失败: " + sFileUrl);
}
}
} finally {
HCNetSDK.INSTANCE.NET_DVR_Logout(userId);
HCNetSDK.INSTANCE.NET_DVR_Cleanup();
}
HCNetSDK.INSTANCE.NET_DVR_Logout(userId);
HCNetSDK.INSTANCE.NET_DVR_Cleanup();
return result ? SdkResponse.requestOk() : SdkResponse.requestFail("[SDK] 最终抓图失败");
}
public static void sync截图(String imageName, String taskCode) {
if (StringUtils.isEmpty(imageName)) {
log.warn("图片名称未定义");
}
String imagePath = HikvisionSnapshotUtil.path + DateUtil.thisYear();
String sFileUrl = imagePath + "\\" + imageName + "_" + taskCode;
String newFileUrl = imagePath + "\\" + imageName;
if (!HCNetSDK.INSTANCE.NET_DVR_Init()) {
}
NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();
int userId = HCNetSDK.INSTANCE.NET_DVR_Login_V30(ip, port, username, password, deviceInfo);
if (userId < 0) {
log.warn("[SDK] 登录失败");
HCNetSDK.INSTANCE.NET_DVR_Cleanup();
}
NET_DVR_JPEGPARA jpegPara = new NET_DVR_JPEGPARA();
// D1
jpegPara.wPicSize = 2;
// 一般质量
jpegPara.wPicQuality = 0;
//命名规则:任务号+载具号+时间.jpg
try {
boolean result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl);
if (!result) {
result = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, sFileUrl);
if (result) {
boolean result2 = HCNetSDK.INSTANCE.NET_DVR_CaptureJPEGPicture(userId, channel, jpegPara, newFileUrl);
log.info("[SDK] 抓图成功" + imagePath + ":" + imageName);
} else {
log.warn("[SDK] 抓图失败");
}
}
} finally {
HCNetSDK.INSTANCE.NET_DVR_Logout(userId);
HCNetSDK.INSTANCE.NET_DVR_Cleanup();
}
}
}