Ver código fonte

广州模考

YuanPan 7 anos atrás
pai
commit
9b779c4755

+ 67 - 2
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/ScoreApi.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.admin.api;
 
 import cn.com.qmth.stmms.ms.admin.assembler.ScoreAssembler;
 import cn.com.qmth.stmms.ms.admin.dto.ScoreCheckDTO;
+import cn.com.qmth.stmms.ms.admin.utils.WaterMarkUtils;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
 import cn.com.qmth.stmms.ms.core.domain.Student;
@@ -12,15 +13,18 @@ import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.core.repository.WorkRepo;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
-import org.apache.catalina.connector.Response;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
-import java.math.BigInteger;
+import java.awt.*;
+import java.io.File;
+import java.io.IOException;
 import java.util.*;
+import java.util.List;
 import java.util.stream.Collectors;
 
 /**
@@ -168,4 +172,65 @@ public class ScoreApi {
         }
         return ResponseEntity.ok(null);
     }
+
+    @Value("${sys.config.imageDir}")
+    private String imagePath;
+
+    @Value("${sys.config.watermark}")
+    private String watermark;
+
+    private static int watermarkTotal;
+    private static int watermarkFinished;
+    private static boolean watermarking = false;
+
+    @PostMapping("/watermark")
+    public void watermark(@RequestParam("workId") Long workId) {
+
+        if (!watermarking) {
+            watermarking = true;
+            watermarkTotal = 0;
+            watermarkFinished = 0;
+
+            final Font font = new Font("Symbol", Font.PLAIN, 60);                     //水印字体
+            final Color color = new Color(254, 3, 10, 255);                               //水印图片色彩以及透明度
+            final List<Paper> papers = paperRepo.findByWorkId(workId);
+            watermarkTotal = papers.size();
+
+            new Thread(() -> {
+
+                for (int i = 0; i < watermarkTotal; i++) {
+                    watermarkFinished = i + 1;
+                    Paper paper = papers.get(i);
+                    Double score = paper.getInspectScore() == null ? paper.getScore() : paper.getInspectScore();
+                    String examNumber = paper.getExamNumber();
+                    String areaCode = paper.getAreaCode();
+                    Subject subject = paper.getSubject();
+
+                    String imageFile = imagePath + "/" + workId + "/" + subject.toString() + "/" + areaCode + "/" + examNumber + ".jpg";
+                    String watermarkFile = watermark + "/" + workId + "/" + subject.toString() + "/" + areaCode + "/" + examNumber + ".jpg";
+
+                    File targetFile = new File(watermarkFile);
+                    targetFile.getParentFile().mkdirs();//创建父级目录
+                    WaterMarkUtils.addWaterMark(imageFile, watermarkFile, String.valueOf(score.intValue()) + "分", color, font);
+                    System.out.println(watermarkFile + "生产成功");
+
+                }
+
+                watermarking = false;
+            }).start();
+        } else {
+            throw new RuntimeException("请勿重复生成");
+        }
+
+
+    }
+
+    @GetMapping("/watermark")
+    public Map<String, Object> watermarkProgress(@RequestParam("workId") Long workId) {
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("watermarkTotal", watermarkTotal);
+        resultMap.put("watermarkFinished", watermarkFinished);
+        resultMap.put("watermarking", watermarking);
+        return resultMap;
+    }
 }

+ 69 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/utils/WaterMarkUtils.java

@@ -0,0 +1,69 @@
+package cn.com.qmth.stmms.ms.admin.utils;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileOutputStream;
+
+/**
+ * Created by yuanpan on 2017/12/13.
+ */
+public class WaterMarkUtils {
+    /**
+     * @param srcImgPath       源图片路径
+     * @param tarImgPath       保存的图片路径
+     * @param waterMarkContent 水印内容
+     * @param markContentColor 水印颜色
+     * @param font             水印字体
+     */
+    public static void addWaterMark(String srcImgPath, String tarImgPath, String waterMarkContent, Color markContentColor, Font font) {
+
+        try {
+            // 读取原图片信息
+            File srcImgFile = new File(srcImgPath);//得到文件
+            Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片
+            int srcImgWidth = srcImg.getWidth(null);//获取图片的宽
+            int srcImgHeight = srcImg.getHeight(null);//获取图片的高
+            // 加水印
+            BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
+            Graphics2D g = bufImg.createGraphics();
+            g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
+            g.setColor(markContentColor); //根据图片的背景设置水印颜色
+            g.setFont(font);              //设置字体
+
+            //设置水印的坐标
+            int x = srcImgWidth - getWatermarkWidth(waterMarkContent, g);
+            int y = getWatermarkHeight(g);
+            g.drawString(waterMarkContent, x, y);  //画出水印
+            g.dispose();
+            // 输出图片
+            FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
+            ImageIO.write(bufImg, "jpg", outImgStream);
+            System.out.println("添加水印完成");
+            outImgStream.flush();
+            outImgStream.close();
+
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+    }
+
+    private static int getWatermarkWidth(String waterMarkContent, Graphics2D g) {
+        return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
+    }
+
+    private static int getWatermarkHeight(Graphics2D g) {
+        return g.getFontMetrics(g.getFont()).getHeight();
+    }
+
+    public static void main(String[] args) {
+        Font font = new Font("Symbol", Font.PLAIN, 60);                     //水印字体
+        String srcImgPath = "/Users/yuanpan/tmp/1842030001.jpg"; //源图片地址
+        String tarImgPath = "/Users/yuanpan/tmp/1842030002.jpg"; //待存储的地址
+        String waterMarkContent = "90分";  //水印内容
+        Color color = new Color(254, 3, 10, 255);                               //水印图片色彩以及透明度
+        WaterMarkUtils.addWaterMark(srcImgPath, tarImgPath, waterMarkContent, color, font);
+
+    }
+}

+ 1 - 0
stmms-ms-main/src/main/resources/application.properties

@@ -37,6 +37,7 @@ app.admin.password=123456
 
 sys.config.imageDir=/Users/yuanpan/tmp/stmms-ms/static/images
 sys.config.thumbDir=/Users/yuanpan/tmp/stmms-ms/static/thumbs
+sys.config.watermark=/Users/yuanpan/tmp/stmms-ms/static/watermark
 #sys.config.imageDir=.\\static\\images
 #sys.config.thumbDir=.\\static\\thumbs
 sys.config.compression.percent=60