From 783ea0c3f6aa5a74c1f858514939696ba623adc7 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期二, 09 六月 2020 14:18:37 +0800
Subject: [PATCH] fix DrawRect,use drawLine

---
 controllers/fileController.go |   10 --
 extend/util/util.go           |   35 --------
 extend/util/image.go          |  165 ++++++++++++++++++++++++++++++++---------
 3 files changed, 130 insertions(+), 80 deletions(-)

diff --git a/controllers/fileController.go b/controllers/fileController.go
index ad9a211..1f591af 100644
--- a/controllers/fileController.go
+++ b/controllers/fileController.go
@@ -181,14 +181,8 @@
 	}
 	red := color.RGBA{255, 0, 0, 0}
 	for _,faceResult := range *faceArr {
-		rect := image.Rect(int(faceResult.Pos.RcFace.Left),
-			int(faceResult.Pos.RcFace.Top),
-			int(faceResult.Pos.RcFace.Right),
-			int(faceResult.Pos.RcFace.Bottom))
-		err = godraw.DrawRectangle(img, rect, red, 3)
-		if err != nil {
-			logger.Debug("godraw.DrawRectangle err:", err)
-		}
+		util.DrawRect(img.(*image.RGBA),int(faceResult.Pos.RcFace.Left),int(faceResult.Pos.RcFace.Top),int(faceResult.Pos.RcFace.Right),
+			int(faceResult.Pos.RcFace.Bottom), red)
 	}
 
 	quantity := 100
diff --git a/extend/util/image.go b/extend/util/image.go
index 585d0e1..509e338 100644
--- a/extend/util/image.go
+++ b/extend/util/image.go
@@ -61,51 +61,142 @@
 	return x0_new, y0_new, x1_new, y1_new
 }
 
-func DrawRect(img *protomsg.Image, rect *protomsg.Rect) ([]byte, error) {
-	red := color.RGBA{255, 0, 0, 0}
-
-	targetRect := image.Rect(int(rect.Left), int(rect.Top), int(rect.Right), int(rect.Bottom))
-	bgImg, err := godraw.ToImage(img.Data, int(img.Width), int(img.Height))
-	if err == nil {
-		err1 := godraw.DrawRectangle(bgImg, targetRect, red, 2)
-		if err1 != nil {
-			return nil, err1
-		} else {
-			bytes,err := godraw.ImageToJpeg(bgImg, nil)
-			if err != nil {
-				return nil, err
-			}
-			return bytes, nil
-		}
+// 闀垮鍙樹负涓�姣斾竴锛屾瘡杈瑰悇鎵╃櫨鍒嗕箣20
+func EnlargeSizeForCar(x0, y0, x1, y1 int, i protomsg.Image) (x0_new, y0_new, x1_new, y1_new int) {
+	// 鍏堟妸闀垮鍙樹负涓�姣斾竴
+	chazhi := (y1 - y0) - (x1 - x0)
+	x0 = x0 - chazhi/2
+	if x0 < 0 {
+		x0 = 0
+	}
+	x1 = x1 + chazhi/2
+	if x1 > int(i.Width) {
+		x1 = int(i.Width)
 	}
 
-	return nil, err
+	// 鍐嶆妸姣忚竟鍚勬墿澶х櫨鍒嗕箣20
+	enlarge := float32(0.2)
+	x0_new = int((1+enlarge)*float32(x0) - enlarge*float32(x1))
+	if x0_new < 0 {
+		x0_new = 0
+	}
+	x1_new = int((1+enlarge)*float32(x1) - enlarge*float32(x0))
+	if x1_new > int(i.Width) {
+		x1_new = int(i.Width)
+	}
+	y0_new = int((1+enlarge)*float32(y0) - enlarge*float32(y1))
+	if y0_new < 0 {
+		y0_new = 0
+	}
+	y1_new = int((1+enlarge)*float32(y1) - enlarge*float32(y0))
+	if y1_new > int(i.Height) {
+		y1_new = int(i.Height)
+	}
+	return
 }
 
-func DrawPolygon(img *protomsg.Image, points []protomsg.Point) ([]byte, error) {
+// 涓嶆墿杈�
+func EnlargeSize(x0, y0, x1, y1 int, i protomsg.Image) (int, int, int, int) {
 
-	var pts []image.Point
-	for _, pt := range points {
-		pts = append(pts, image.Point{
-			X: int(pt.X),
-			Y: int(pt.Y),
-		})
+	// 鍏堟妸闀垮鍙樹负涓�姣斾竴
+	chazhi := (y1 - y0) - (x1 - x0)
+	x0 = x0 - chazhi/2
+	if x0 < 0 {
+		x0 = 0
 	}
-	yellow := color.RGBA{255, 255, 0, 0}
+	x1 = x1 + chazhi/2
+	if x1 > int(i.Width) {
+		x1 = int(i.Width)
+	}
 
-	bgImg, err := godraw.ToImage(img.Data, int(img.Width), int(img.Height))
-	if err == nil {
-		err1 := godraw.DrawPolygon(bgImg, pts, yellow,2)
-		if err1 != nil {
-			return nil, err1
-		} else {
-			bytes,err := godraw.ImageToJpeg(bgImg, nil)
-			if err != nil {
-				return nil, err
-			}
-			return bytes, nil
+	if y0 < 0 {
+		y0 = 0
+	}
+
+	if y1 > int(i.Height) {
+		y1 = int(i.Height)
+	}
+
+	return x0, y0, x1, y1
+}
+
+// 闀垮鍙樹负涓�姣斾竴锛屾瘡杈瑰悇鎵╃櫨鍒嗕箣50
+func EnlargeSizeForTem(x0, y0, x1, y1 int, i protomsg.Image) (x0_new, y0_new, x1_new, y1_new int) {
+	// 鍏堟妸闀垮鍙樹负涓�姣斾竴
+	chazhi := (y1 - y0) - (x1 - x0)
+	x0 = x0 - chazhi/2
+	if x0 < 0 {
+		x0 = 0
+	}
+	x1 = x1 + chazhi/2
+	if x1 > int(i.Width) {
+		x1 = int(i.Width)
+	}
+
+	// 鍐嶆妸姣忚竟鍚勬墿澶х櫨鍒嗕箣50
+	enlarge := float32(0.5)
+	x0_new = int((1+enlarge)*float32(x0) - enlarge*float32(x1))
+	if x0_new < 0 {
+		x0_new = 0
+	}
+	x1_new = int((1+enlarge)*float32(x1) - enlarge*float32(x0))
+	if x1_new > int(i.Width) {
+		x1_new = int(i.Width)
+	}
+	y0_new = int((1+enlarge)*float32(y0) - enlarge*float32(y1))
+	if y0_new < 0 {
+		y0_new = 0
+	}
+	y1_new = int((1+enlarge)*float32(y1) - enlarge*float32(y0))
+	if y1_new > int(i.Height) {
+		y1_new = int(i.Height)
+	}
+	return
+}
+
+func drawLine(img *image.RGBA, x0, y0, x1, y1 int, c color.Color) {
+	var dx int
+	if x1 > x0 {
+		dx = x1 - x0
+	} else {
+		dx = x0 - x1
+	}
+	var dy int
+	if y1 > y0 {
+		dy = y1 - y0
+	} else {
+		dy = y0 - y1
+	}
+
+	sx, sy := 1, 1
+	if x0 >= x1 {
+		sx = -1
+	}
+	if y0 >= y1 {
+		sy = -1
+	}
+	err := dx - dy
+
+	for {
+		img.Set(x0, y0, c)
+		if x0 == x1 && y0 == y1 {
+			return
+		}
+		e2 := err * 2
+		if e2 > -dy {
+			err -= dy
+			x0 += sx
+		}
+		if e2 < dx {
+			err += dx
+			y0 += sy
 		}
 	}
+}
 
-	return nil, err
+func DrawRect(img *image.RGBA, x0, y0, x1, y1 int, c color.Color) {
+	drawLine(img, x0, y0, x1, y0, c)
+	drawLine(img, x1, y0, x1, y1, c)
+	drawLine(img, x1, y1, x0, y1, c)
+	drawLine(img, x0, y1, x0, y0, c)
 }
\ No newline at end of file
diff --git a/extend/util/util.go b/extend/util/util.go
index 49e7bbb..f87adf7 100644
--- a/extend/util/util.go
+++ b/extend/util/util.go
@@ -18,7 +18,6 @@
 	"time"
 	"webserver/extend/code"
 
-	"basic.com/pubsub/protomsg.git"
 	"crypto/rand"
 	"fmt"
 	"github.com/gin-gonic/gin"
@@ -93,40 +92,6 @@
 		return nil, err
 	}
 	return pix, nil
-}
-
-// 闀垮鍙樹负涓�姣斾竴锛屾瘡杈瑰悇鎵╃櫨鍒嗕箣20
-func EnlargeSize(x0, y0, x1, y1 int, i protomsg.Image) (x0_new, y0_new, x1_new, y1_new int) {
-	// 鍏堟妸闀垮鍙樹负涓�姣斾竴
-	chazhi := (y1 - y0) - (x1 - x0)
-	x0 = x0 - chazhi/2
-	if x0 < 0 {
-		x0 = 0
-	}
-	x1 = x1 + chazhi/2
-	if x1 > int(i.Width) {
-		x1 = int(i.Width)
-	}
-
-	// 鍐嶆妸姣忚竟鍚勬墿澶х櫨鍒嗕箣20
-	enlarge := float32(0.2)
-	x0_new = int((1+enlarge)*float32(x0) - enlarge*float32(x1))
-	if x0_new < 0 {
-		x0_new = 0
-	}
-	x1_new = int((1+enlarge)*float32(x1) - enlarge*float32(x0))
-	if x1_new > int(i.Width) {
-		x1_new = int(i.Width)
-	}
-	y0_new = int((1+enlarge)*float32(y0) - enlarge*float32(y1))
-	if y0_new < 0 {
-		y0_new = 0
-	}
-	y1_new = int((1+enlarge)*float32(y1) - enlarge*float32(y0))
-	if y1_new > int(i.Height) {
-		y1_new = int(i.Height)
-	}
-	return
 }
 
 func StringIpToInt(ipstring string) int {

--
Gitblit v1.8.0