5.海康威视-Spring boot下实现抓图并保存

1. 配置yml文件

在yml文件中配置保存文件的地址

# 海康配置
hksetting:
  image:
    # 抓取图片上传路径
    dvrPicSavePath: F://ideaworkspace/hk-project/dvr-pic

2. 抓图实现方式

  1. 创建图片结构体:HCNetSDK.NET_DVR_JPEGPARA
    结构体信息:
//图片质量
public static class NET_DVR_JPEGPARA extends Structure {
	/*注意:当图像压缩分辨率为VGA时,支持0=CIF, 1=QCIF, 2=D1抓图,
	当分辨率为3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA,7=XVGA, 8=HD900p
	仅支持当前分辨率的抓图*/
	public short	wPicSize;				/* 0=CIF, 1=QCIF, 2=D1 3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA*/
	public short	wPicQuality;			/* 图片质量系数 0-最好 1-较好 2-一般 */
}

在这里插入图片描述

  1. 创建文件名称
  2. 调用抓图方法: NET_DVR_CaptureJPEGPicture
    在这里插入图片描述
/**
 * 设备抓图(无预览)
 * 单帧设备抓取保存的图片为JPG,具体注意问题需要详细查看【设备网络sdk使用手册】
 * @param lUserID: 登录设备的id
 * @param lChannel: 设备通道
 * @param lPicSize: 图片大小
 * @param lPicQuality: 图片质量
 * @param sPicbuf: 图片保存路径
 * @return
 */
public String captureJPEGPicture(int lUserID, int lChannel, int lPicSize, int lPicQuality, String sPicbuf)
{
        NativeLong nlUserID = new NativeLong(lUserID);
        NativeLong nChannel = new NativeLong(lChannel);
        HCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new HCNetSDK.NET_DVR_JPEGPARA();
        lpJpegPara.wPicSize = (short)lPicSize;
        lpJpegPara.wPicQuality = (short)lPicQuality;
        // 参数必须写入到结构体,否则在保存图片的时候异常图片
		lpJpegPara.write();
		// 创建文件名称
		String datePath = sPicbuf+"/"+DateUtils.dateTime();
		// 判断文件夹是否创建
		File file = new File(datePath);
		if (!file.exists()){
			file.mkdirs();
		}
		// 文件名称
		String imageName = DateUtils.fullDateTime()+".jpg";
		// 全路径
		String path = datePath+"/"+imageName;
		// 开始抓图
        if (!hCNetSDK.NET_DVR_CaptureJPEGPicture(nlUserID, nChannel, lpJpegPara, path))
        {
            return "{失败编码:"+hCNetSDK.NET_DVR_GetLastError()+"}";
        }else {
            return "抓图成功!";
        }
}

3. 接口层实现

@RestController
public class DeviceController {
	@Value("${hksetting.image.dvrPicSavePath}")
	private String dvrPicSavePath;

	HIKDevice hikDevice;

	// 初始化设备调用实现类
	DeviceController() {
		if (hikDevice == null) {
			hikDevice = new HIKDevice();
		}
	}
	
	@ApiOperation(value = "设备抓图", notes = "设备抓图")
	@GetMapping(value = "/driverDVRPic")
	@ResponseBody
	public Object driverDVRPic(@RequestBody JSONObject json){
		int lUserID = Integer.parseInt(json.get("lUserID").toString());
		int lChannel = Integer.parseInt(json.get("lChannel").toString());
		int lPicSize = Integer.parseInt(json.get("lPicSize").toString());
		int lPicQuality = Integer.parseInt(json.get("lPicQuality").toString());
		System.out.println(dvrPicSavePath);
		String msg = hikDevice.captureJPEGPicture(lUserID, lChannel, lPicSize, lPicQuality, dvrPicSavePath);
		return ResponseUtil.ok(msg);
	}
}

4. 通过Postman调用测试

  1. 获取设备登录id与设备通道
    注册登录的实现参考文章:4.海康威视-Springboot下实现注册与注销
  2. 测试抓图方法
    在这里插入图片描述
    抓图成功!
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值