licailing vor 4 Jahren
Ursprung
Commit
c976658596

+ 6 - 0
pom.xml

@@ -316,6 +316,12 @@
             <artifactId>aliyun-sdk-oss</artifactId>
             <version>3.11.2</version>
         </dependency>
+
+        <dependency>
+            <groupId>net.coobird</groupId>
+            <artifactId>thumbnailator</artifactId>
+            <version>0.4.13</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 75 - 44
src/main/java/com/izouma/wenlvju/service/performance/ProgrammeAwardService.java

@@ -2,8 +2,10 @@ package com.izouma.wenlvju.service.performance;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.izouma.wenlvju.config.Constants;
 import com.izouma.wenlvju.domain.ArtType;
 import com.izouma.wenlvju.domain.Award;
+import com.izouma.wenlvju.domain.performance.Participant;
 import com.izouma.wenlvju.domain.performance.Programme;
 import com.izouma.wenlvju.domain.performance.ProgrammeAward;
 import com.izouma.wenlvju.dto.AwardDTO;
@@ -13,15 +15,25 @@ import com.izouma.wenlvju.enums.ProgrammeStatus;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.ArtTypeRepo;
 import com.izouma.wenlvju.repo.AwardRepo;
+import com.izouma.wenlvju.repo.performance.ParticipantRepo;
 import com.izouma.wenlvju.repo.performance.ProgrammeAwardRepo;
 import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
+import com.izouma.wenlvju.service.storage.StorageService;
 import com.izouma.wenlvju.utils.JpaUtils;
 import com.izouma.wenlvju.utils.ObjUtils;
 import lombok.AllArgsConstructor;
+import net.coobird.thumbnailator.Thumbnails;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.geom.Ellipse2D;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.URL;
 import java.util.*;
+import java.util.List;
 import java.util.stream.Collectors;
 
 @Service
@@ -32,6 +44,8 @@ public class ProgrammeAwardService {
     private ArtTypeRepo        artTypeRepo;
     private ProgrammeRepo      programmeRepo;
     private AwardRepo          awardRepo;
+    private ParticipantRepo    participantRepo;
+    private StorageService     storageService;
 
     public Page<ProgrammeAward> all(PageQuery pageQuery) {
         return programmeAwardRepo.findAll(JpaUtils.toSpecification(pageQuery, ProgrammeAward.class), JpaUtils.toPageRequest(pageQuery));
@@ -337,51 +351,68 @@ public class ProgrammeAwardService {
 //        programmeAwardRepo.saveAll(programmeAwards);
     }
 
-//    public String createAward(Long userId, boolean home, Long packageId, String path) throws IOException, WxErrorException {
-//        BufferedImage shareImg = ImageIO.read(this.getClass().getResourceAsStream("/static/img.png"));
-//        BufferedImage result = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);
-//        Graphics2D g = result.createGraphics();
-//        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-//        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-//        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-//        g.setComposite(AlphaComposite.SrcOver);
-//        g.drawImage(shareImg, 0, 0, null);
-//
-//        byte[] bytes = wxMaService.getQrcodeService()
-//                .createWxaCodeUnlimitBytes("expert=true&invitor=" + userId, "pages/home", 94 * 2, false, new WxMaCodeLineColor("0", "0", "0"), true);
-//        if (!home) {
-//            bytes = wxMaService.getQrcodeService()
-//                    .createWxaCodeUnlimitBytes("expert=true&invitor=" + userId + "&id=" + packageId, "pages/detail", 94 * 2, false, new WxMaCodeLineColor("0", "0", "0"), true);
-//        }
-//        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
-//        BufferedImage codeImg = ImageIO.read(byteArrayInputStream);
-//
-//        g.drawImage(codeImg, 0, 0, 150 * 2, 150 * 2, null);
-//
-//        BufferedImage avatar = ImageIO
-//                .read(new URL(Optional.ofNullable(user.getAvatar()).orElse(Constants.DEFAULT_AVATAR)));
+    public String createAward(String path) throws IOException {
+//        Participant participant = participantRepo.findById(participantId).orElseThrow(new BusinessException("无记录"));
+        BufferedImage shareImg = ImageIO.read(this.getClass().getResourceAsStream("/static/certificate.jpeg"));
+        BufferedImage result = new BufferedImage(1100, 778, BufferedImage.TYPE_INT_RGB);
+        Graphics2D g = result.createGraphics();
+        g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+        g.setComposite(AlphaComposite.SrcOver);
+        g.drawImage(shareImg, 0, 0, null);
+
+        // 头像
+        BufferedImage avatar = ImageIO
+                .read(new URL(Optional.ofNullable("http://yskj.njlyw.cn:8081/files/image/2021-11-04-19-07-50IkiRAgFj.jpg")
+                        .orElse(Constants.DEFAULT_AVATAR)));
 //        int size = Math.min(avatar.getWidth(), avatar.getHeight());
 //        BufferedImage subImg = avatar
 //                .getSubimage((avatar.getWidth() - size) / 2, (avatar.getHeight() - size) / 2, size, size);
-//        BufferedImage avatarImg = new BufferedImage(68 * 2, 68 * 2, BufferedImage.TYPE_INT_ARGB);
-//        Graphics2D g2 = avatarImg.createGraphics();
-//        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
-//        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-//        g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
-//        g2.setComposite(AlphaComposite.SrcOver);
-//        g2.setBackground(Color.GREEN);
-//        g2.setClip(new Ellipse2D.Float(0, 0, 68 * 2, 68 * 2));
-//        g2.drawImage(subImg, 0, 0, 68 * 2, 68 * 2, null);
-//
-//        g.drawImage(avatarImg, 41 * 2, 41 * 2, 68 * 2, 68 * 2, null);
-//
-//        ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
-//        Thumbnails.of(result)
-//                .scale(1)
-//                .outputQuality(.9f)
-//                .outputFormat("jpg")
-//                .toOutputStream(out);
-//        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
-//        return storageService.uploadFromInputStream(in, path + userId + ".jpg");
-//    }
+        BufferedImage avatarImg = new BufferedImage(68 * 2, 78 * 2, BufferedImage.TYPE_INT_ARGB);
+        Graphics2D g2 = avatarImg.createGraphics();
+        g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+        g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+        g2.setComposite(AlphaComposite.SrcOver);
+        g2.setBackground(Color.GREEN);
+//        g2.setClip(new Ellipse2D.Float(0, 0, 68 * 2, 76 * 2));
+        g2.drawImage(avatar, 0, 0, 68 * 2, 78 * 2, null);
+
+        g.drawImage(avatarImg, 420 * 2, 50 * 2, 68 * 2, 78 * 2, null);
+
+        // 文字
+        g.setColor(new Color(0, 0, 0)); //根据图片的背景设置水印颜色
+        Font font = new Font("黑体", Font.PLAIN, 30);
+        String content = "陆俊旗小朋友:";
+        // 加水印
+        g.setFont(font);              //设置字体
+        //设置水印的坐标
+        g.drawString(content, 160, 330);  //画出水印
+
+        String content1 = "在2021“宁艺之星”社会艺术水平考级展演(览)中,表现优";
+        //设置水印的坐标
+        g.drawString(content1, 215, 390);
+        String content2 = "秀,被评为“一等奖”,特发此证,以资鼓励。";
+        g.drawString(content2, 160, 450);
+
+        g.dispose();
+        ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
+        Thumbnails.of(result)
+                .scale(1)
+                .outputQuality(.9f)
+                .outputFormat("jpg")
+                .toOutputStream(out);
+        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+
+
+        File file = new File("/Users/qiufangchao/Desktop/1.jpg");
+        byte[] buffer = new byte[in.available()];
+        in.read(buffer);
+        OutputStream outStream = new FileOutputStream(file);
+        outStream.write(buffer);
+//        return storageService.uploadFromInputStream(in, path + "test.jpg");
+
+        return "ok";
+    }
 }

+ 9 - 0
src/main/java/com/izouma/wenlvju/web/performance/ProgrammeAwardController.java

@@ -81,5 +81,14 @@ public class ProgrammeAwardController extends BaseController {
     public void saveProgramme(@RequestBody List<ProgrammeAwardDTO> dtos) {
         programmeAwardService.saveProgramme1(dtos);
     }
+
+    @PostMapping("/createAward")
+    public void createAward(){
+        try {
+            programmeAwardService.createAward("");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
 }
 

BIN
src/main/resources/static/certificate.jpeg


+ 24 - 0
src/test/java/com/izouma/wenlvju/service/performance/ProgrammeAwardServiceTest.java

@@ -0,0 +1,24 @@
+package com.izouma.wenlvju.service.performance;
+
+
+import com.izouma.wenlvju.ApplicationTests;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.io.IOException;
+
+public class ProgrammeAwardServiceTest extends ApplicationTests {
+
+    @Autowired
+    private ProgrammeAwardService programmeAwardService;
+
+    @Test
+    public void test(){
+        try {
+            programmeAwardService.createAward("");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+}