Просмотр исходного кода

添加一个不是很可靠的简单二维码识别接口

ximinghao 1 месяц назад
Родитель
Сommit
3eadfe4b3c

+ 20 - 2
pom.xml

@@ -176,8 +176,26 @@
             <groupId>org.springframework</groupId>
             <groupId>org.springframework</groupId>
             <artifactId>spring-test</artifactId>
             <artifactId>spring-test</artifactId>
         </dependency>
         </dependency>
-
-
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>3.4.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>javase</artifactId>
+            <version>3.4.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.twelvemonkeys.imageio</groupId>
+            <artifactId>imageio-jpeg</artifactId>
+            <version>3.8.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.twelvemonkeys.imageio</groupId>
+            <artifactId>imageio-tiff</artifactId>
+            <version>3.8.0</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
     <build>
     <build>

+ 31 - 2
src/main/java/com/skyversation/xjcy/controller/OtherController.java

@@ -1,6 +1,9 @@
 package com.skyversation.xjcy.controller;
 package com.skyversation.xjcy.controller;
 
 
+import cn.hutool.extra.qrcode.BufferedImageLuminanceSource;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.google.zxing.*;
+import com.google.zxing.common.HybridBinarizer;
 import com.skyversation.xjcy.bean.User;
 import com.skyversation.xjcy.bean.User;
 import com.skyversation.xjcy.dms.DMSColumn;
 import com.skyversation.xjcy.dms.DMSColumn;
 import com.skyversation.xjcy.dms.DMSService;
 import com.skyversation.xjcy.dms.DMSService;
@@ -14,9 +17,13 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 
-import java.util.Collections;
-import java.util.List;
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.InputStream;
+import java.util.*;
 
 
 import static com.skyversation.xjcy.service.AuthService.RESPONSE_FIELD_USERNAME;
 import static com.skyversation.xjcy.service.AuthService.RESPONSE_FIELD_USERNAME;
 
 
@@ -76,4 +83,26 @@ public class OtherController {
             return MessageManage.successWithNoData("成功绑定到对应企业");
             return MessageManage.successWithNoData("成功绑定到对应企业");
         }
         }
     }
     }
+
+    @RequestMapping(value ="/scanQR")
+    public String scanQR(
+            @RequestParam("file") MultipartFile file
+    ){
+        try {
+            InputStream inputStream = file.getInputStream();
+            BufferedImage image = ImageIO.read(inputStream);
+            LuminanceSource source = new BufferedImageLuminanceSource(image);
+            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
+
+            // 正确配置解码提示
+            Map<DecodeHintType, Object> hints = new EnumMap<>(DecodeHintType.class);
+            hints.put(DecodeHintType.POSSIBLE_FORMATS, Collections.singletonList(BarcodeFormat.QR_CODE));
+            hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
+
+            Result result = new MultiFormatReader().decode(bitmap, hints);
+            return MessageManage.success("成功解析二维码", result.getText());
+        } catch (Exception e) {
+            return MessageManage.error(-1,"解析二维码失败");
+        }
+    }
 }
 }

+ 6 - 0
src/main/java/com/skyversation/xjcy/util/MessageManage.java

@@ -113,4 +113,10 @@ public class MessageManage {
     public static String successWithNoData(String message){
     public static String successWithNoData(String message){
         return MessageManage.getInstance().getResultContent(200, message, message);
         return MessageManage.getInstance().getResultContent(200, message, message);
     }
     }
+    public static String successWithNoMessage(Object content){
+        return MessageManage.getInstance().getResultContent(200, content, "成功");
+    }
+    public static String success(String message , Object content){
+        return MessageManage.getInstance().getResultContent(200, content, message);
+    }
 }
 }