From c96ab96cb0243e197c5d6603312dfd06b3b15ebb Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期三, 14 十二月 2022 16:01:02 +0800
Subject: [PATCH] 报警图片加红色标注框

---
 ycl-platform/src/main/java/com/ycl/dto/video/ObjectRect.java                           |   20 ++++++++++
 ycl-platform/src/main/java/com/ycl/dto/video/AlarmObject.java                          |   14 +++++++
 ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java |   30 +++++++++++++-
 3 files changed, 61 insertions(+), 3 deletions(-)

diff --git a/ycl-platform/src/main/java/com/ycl/dto/video/AlarmObject.java b/ycl-platform/src/main/java/com/ycl/dto/video/AlarmObject.java
new file mode 100644
index 0000000..18f593b
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/dto/video/AlarmObject.java
@@ -0,0 +1,14 @@
+package com.ycl.dto.video;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AlarmObject {
+
+    @JsonProperty("ObjectRect")
+    List<ObjectRect> objectRect;
+}
+
diff --git a/ycl-platform/src/main/java/com/ycl/dto/video/ObjectRect.java b/ycl-platform/src/main/java/com/ycl/dto/video/ObjectRect.java
new file mode 100644
index 0000000..301fed9
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/dto/video/ObjectRect.java
@@ -0,0 +1,20 @@
+package com.ycl.dto.video;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class ObjectRect {
+
+    @JsonProperty("H")
+    public Integer h;
+
+    @JsonProperty("W")
+    public Integer w;
+
+    @JsonProperty("X")
+    public Integer x;
+
+    @JsonProperty("Y")
+    public Integer y;
+}
diff --git a/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java
index 3ccd611..e80d31d 100644
--- a/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java
+++ b/ycl-platform/src/main/java/com/ycl/service/video/impl/VideoAlarmReportServiceImpl.java
@@ -2,11 +2,10 @@
 
 import com.alibaba.druid.util.StringUtils;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ycl.dto.video.AlarmDataParam;
-import com.ycl.dto.video.AlarmParam;
-import com.ycl.dto.video.CameraInfParam;
+import com.ycl.dto.video.*;
 import com.ycl.entity.video.VideoAlarmReport;
 import com.ycl.mapper.video.VideoAlarmReportMapper;
 import com.ycl.service.caseHandler.IViolationsService;
@@ -15,8 +14,13 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.imageio.ImageIO;
 import javax.xml.bind.DatatypeConverter;
+import java.awt.*;
+import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -61,7 +65,27 @@
 
                 byte[] data = DatatypeConverter.parseBase64Binary(alarmParam.getPicData());
                 InputStream inputStream = new ByteArrayInputStream(data);
+
                 try {
+                    if (!StringUtils.isEmpty(alarmParam.getAlarmData().getAlarmObject().toString())) {
+                        String alarmObject = JSON.toJSONString(alarmParam.getAlarmData().getAlarmObject());
+                        if (!StringUtils.isEmpty(alarmObject)) {
+                            BufferedImage image = ImageIO.read(inputStream);
+
+                            Graphics2D g2 = (Graphics2D)image.getGraphics();
+                            g2.setColor(Color.RED);
+                            g2.setStroke(new BasicStroke(3.0f));
+                            List<AlarmObject> alarmObjects = JSON.parseArray(alarmObject, AlarmObject.class);
+                            alarmObjects.forEach(o -> {
+                                o.getObjectRect().forEach(rect -> {
+                                    g2.drawRect(rect.getX(), rect.getY(), rect.getW(), rect.getH());
+                                });
+                            });
+                            ByteArrayOutputStream os = new ByteArrayOutputStream();
+                            ImageIO.write(image, extension, os);
+                            inputStream = new ByteArrayInputStream(os.toByteArray());
+                        }
+                    }
                     picData = mediaFileUtil.savePicture(inputStream, extension);
                 } catch (Exception e) {
                     e.printStackTrace();

--
Gitblit v1.8.0