yujian
2019-05-24 fc0cc7e808f9228b39b1e6b9d29c5417f41dbcc4
fanli/src/main/java/com/yeshi/fanli/util/ImageUtil.java
@@ -1094,7 +1094,7 @@
      return originalImage;
   }
   static BufferedImage roundImage(BufferedImage srcImage, int cornerRadius) { // 半径
   public static BufferedImage roundImage(BufferedImage srcImage, int cornerRadius) { // 半径
      int width = srcImage.getWidth();
      int height = srcImage.getHeight();
      BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
@@ -1176,6 +1176,121 @@
   }
   
   /**
    * 头像加白底图 邀请好友图片
    * @param urlInputStream
    * @param portraitInputStream
    * @param erCodeInputStream
    * @param targetPath
    * @param inviteCode
    * @throws IOException
    */
   public static void inviteFriendImgWhite(InputStream urlInputStream, InputStream portraitInputStream,
         InputStream erCodeInputStream, String targetPath,String inviteCode) throws IOException {
      inviteFriendImgWhite(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, 260, 908, 230, inviteCode);
   }
   /**
    * 头像加白底图 邀请好友图片  -自定义二维码位置
    * @param urlInputStream
    * @param portraitInputStream
    * @param erCodeInputStream
    * @param targetPath
    * @param inviteCode
    * @throws IOException
    */
   public static void inviteFriendImgWhitecustom(InputStream urlInputStream, InputStream portraitInputStream,
         InputStream erCodeInputStream, String targetPath, Integer pX, Integer pY, Integer size, String inviteCode) throws IOException {
      inviteFriendImgWhite(urlInputStream, portraitInputStream, erCodeInputStream, targetPath, pX, pY, size, inviteCode);
   }
   /**
    * 邀请好友图片加上头像加上白底
    */
   public static void inviteFriendImgWhite(InputStream urlInputStream, InputStream portraitInputStream,
         InputStream erCodeInputStream, String targetPath, Integer pX, Integer pY, Integer size, String inviteCode) throws IOException {
      if (pX == null) {
         pX = 260;
      }
      if (pY == null) {
         pY = 908;
      }
      if (size == null) {
         size = 230;
      }
      BufferedImage bgImage = ImageIO.read(urlInputStream);
      final BufferedImage targetImg = new BufferedImage(bgImage.getWidth(), bgImage.getHeight(),
            BufferedImage.TYPE_INT_RGB);
      HashMap<Key, Object> mapH = new HashMap<Key, Object>();
      mapH.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);// 抗锯齿 (抗锯齿总开关)  
      mapH.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);// 文字抗锯齿 
      // 画 背景图片
      final Graphics2D g2d = targetImg.createGraphics();
      g2d.drawImage(bgImage, 0, 0, bgImage.getWidth(), bgImage.getHeight(), null);
      g2d.setRenderingHints(mapH);
      // 画 二维码
      BufferedImage qrCodeImage = ImageIO.read(erCodeInputStream);
      qrCodeImage = ImageUtil.qrCodeImage(g2d, qrCodeImage, pX, pY, size, size);
      int portraitSize = size * 5 / 23;
      int pPX = pX + size / 2 - portraitSize / 2;
      int pPY = pY + size / 2 - portraitSize / 2;
      // 头像白色边框
      g2d.fillRoundRect(pPX-4, pPY-4,portraitSize+8, portraitSize + 8, 5, 5);
      g2d.setRenderingHints(mapH);
      // 画 头像
      BufferedImage portraitImg = ImageIO.read(portraitInputStream);
      portraitImg = ImageUtil.zoomInImage(portraitImg, portraitSize, portraitSize);
      portraitImg = ImageUtil.roundImage(portraitImg, 10);
      g2d.drawImage(portraitImg, pPX, pPY, portraitSize, portraitSize, null);
      // 画邀请码(邀请码的大小与字体固定)
      if (!StringUtil.isNullOrEmpty(inviteCode)) {
         String st = "邀请码:" + inviteCode;
         String os = System.getProperty("os.name");
         String fontBoldPath = "/usr/share/fonts/PingFang_Medium.ttf";
         if (os.toLowerCase().startsWith("win")) {
            fontBoldPath = "D:/PingFang_Medium.ttf";
         }
         Font boldFont = null;
         try {
            boldFont = Font.createFont(Font.PLAIN, new File(fontBoldPath)).deriveFont(36.0f);
         } catch (FontFormatException e) {
            e.printStackTrace();
         }
         g2d.setFont(boldFont);
         g2d.getFontMetrics(boldFont);
         g2d.setColor(new Color(0, 0, 0));
         int ax = pX - 30;
         int ay = pY + size +  118;
         g2d.setColor(new Color(0, 0, 0));
         g2d.drawString(st, ax, ay);
      }
      OutputStream out = new FileOutputStream(new File(targetPath));
      ImageIO.write(targetImg, "JPEG", out);
      out.flush();
      out.close();
   }
   /**
    * 绘制邀请问候图
    * @param bgPigInStream  背景图
@@ -1203,6 +1318,7 @@
      final Graphics2D g2d = targetImg.createGraphics();
      g2d.drawImage(bgImage, 0, 0, bgImage.getWidth(), bgImage.getHeight(), null);
      g2d.setRenderingHints(mapH);
      g2d.setBackground(Color.WHITE);
      
      // 画 蒙层
      BufferedImage mengCeng = ImageIO
@@ -1217,23 +1333,32 @@
      int size = 210; // 230
      // 画 二维码
      BufferedImage qrCodeImage = ImageIO.read(erCodeInStream);
      qrCodeImage = ImageUtil.qrCodeImage(g2d, qrCodeImage, pX, pY, size, size); // 二维码长宽
      qrCodeImage = qrCodeImage(g2d, qrCodeImage, pX, pY, size, size); // 二维码长宽
      // 230*230
      // 画 头像
      int portraitSize = size * 5 / 23;
      int pPX = pX + size / 2 - portraitSize / 2;
      int pPY = pY + size / 2 - portraitSize / 2;
      // 头像白色边框
      g2d.fillRoundRect(pPX-4, pPY-4,portraitSize+8, portraitSize + 8, 5, 5);
      g2d.setRenderingHints(mapH);
      BufferedImage portraitImg = ImageIO.read(portraitInStream);
      portraitImg = ImageUtil.portraitImg(g2d, portraitImg, pPX, pPY, portraitSize, portraitSize);// 头像长宽
      portraitImg = ImageUtil.zoomInImage(portraitImg, portraitSize, portraitSize);
      portraitImg = ImageUtil.roundImage(portraitImg, 10);
      g2d.drawImage(portraitImg, pPX, pPY, portraitSize, portraitSize, null);
      // 文字白色
      // 字体白色
      Color color = new Color(255, 255, 255);
      String os = System.getProperty("os.name");
      String fontBoldPath = "/usr/share/fonts/yahei.ttf";
      if (os.toLowerCase().startsWith("win")) {
         fontBoldPath = "C:/yahei.ttf";
      }
      Font boldFont = null;
      // 画邀请码(邀请码的大小与字体固定)
@@ -1349,4 +1474,5 @@
      out.flush();
      out.close();
   }
}