Browse Source

修改分享图的样式

Menethil 7 years ago
parent
commit
c02e5fecad

+ 35 - 13
litemall-core/src/main/java/org/linlinjava/litemall/core/qcode/QCodeService.java

@@ -3,6 +3,7 @@ package org.linlinjava.litemall.core.qcode;
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.linlinjava.litemall.core.storage.StorageService;
+import org.linlinjava.litemall.core.system.SystemConfig;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.mock.web.MockMultipartFile;
@@ -35,8 +36,8 @@ public class QCodeService {
             //创建该商品的二维码
             File file = wxMaService.getQrcodeService().createWxaCodeUnlimit(goodId, "pages/index/index");
             FileInputStream inputStream = new FileInputStream(file);
-            //将商品图片,商品名字画到模版图中
-            byte[] imageData = drawPicture(inputStream, goodPicUrl, goodName);
+            //将商品图片,商品名字,商城名字画到模版图中
+            byte[] imageData = drawPicture(inputStream, goodPicUrl, goodName, SystemConfig.getMallName());
             MultipartFile multipartFile = new MockMultipartFile(file.getName(), file.getName(), "image/jpeg", imageData);
             //存储分享图
             storageService.store(multipartFile, getKeyName(goodId));
@@ -68,38 +69,38 @@ public class QCodeService {
      * @return
      * @throws IOException
      */
-    private byte[] drawPicture(InputStream qrCodeImg, String goodPicUrl, String goodName) throws IOException, FontFormatException {
+    private byte[] drawPicture(InputStream qrCodeImg, String goodPicUrl, String goodName, String shopName) throws IOException, FontFormatException {
         //底图
         ClassPathResource redResource = new ClassPathResource("back.jpg");
         BufferedImage red = ImageIO.read(redResource.getInputStream());
 
+
         //商品图片
-        URL avatarUrl = new URL(goodPicUrl);
-        BufferedImage goodImage = ImageIO.read(avatarUrl);
+        URL goodPic = new URL(goodPicUrl);
+        BufferedImage goodImage = ImageIO.read(goodPic);
 
         //小程序二维码
-//        URL qrCodeUrl = new URL(qrCodeImg);
         BufferedImage qrCodeImage = ImageIO.read(qrCodeImg);
 
-
         // --- 画图 ---
 
         //底层空白 bufferedImage
-        BufferedImage baseImage = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
+        BufferedImage baseImage = new BufferedImage(red.getWidth(), red.getHeight(), BufferedImage.TYPE_4BYTE_ABGR_PRE);
 
         //画上图片
         drawImgInImg(baseImage, red, 0, 0, red.getWidth(), red.getHeight());
 
         //画上商品图片
-        drawImgInImg(baseImage, goodImage, 24, 24, 520, 520);
-
+        drawImgInImg(baseImage, goodImage, 56, 135, 720, 720);
 
         //画上小程序二维码
-        drawImgInImg(baseImage, qrCodeImage, 143, 770, 280, 280);
-
+        drawImgInImg(baseImage, qrCodeImage, 442, 1006, 340, 340);
 
         //写上商品名称
-        drawTextInImg(baseImage, goodName, 143, 614);
+        drawTextInImg(baseImage, goodName, 112, 955);
+
+        //写上商城名称
+        drawTextInImgCenter(baseImage, shopName, 112, 98);
 
 
         //转jpg
@@ -113,6 +114,27 @@ public class QCodeService {
         return bs.toByteArray();
     }
 
+    private void drawTextInImgCenter(BufferedImage baseImage, String textToWrite, int x, int y) {
+        Graphics2D g2D = (Graphics2D) baseImage.getGraphics();
+        g2D.setColor(new Color(167, 136, 69));
+
+        String fontName = "Microsoft YaHei";
+
+        Font f = new Font(fontName, Font.PLAIN, 42);
+        g2D.setFont(f);
+        g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+
+        // 计算文字长度,计算居中的x点坐标
+        FontMetrics fm = g2D.getFontMetrics(f);
+        int textWidth = fm.stringWidth(textToWrite);
+        int widthX = (baseImage.getWidth() - textWidth) / 2;
+        // 表示这段文字在图片上的位置(x,y) .第一个是你设置的内容。
+
+        g2D.drawString(textToWrite, widthX, 100);
+        // 释放对象
+        g2D.dispose();
+    }
+
     private void drawTextInImg(BufferedImage baseImage, String textToWrite, int x, int y) throws IOException, FontFormatException {
         Graphics2D g2D = (Graphics2D) baseImage.getGraphics();
         g2D.setColor(new Color(167, 136, 69));

+ 4 - 0
litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java

@@ -56,6 +56,10 @@ public class SystemConfig extends BaseConfig {
         return getConfigBigDec(PRE_FIX + "freight.limit");
     }
 
+    public static String getMallName() {
+        return getConfig(PRE_FIX + "mallname");
+    }
+
     @Override
     public String getPrefix() {
         return PRE_FIX;

BIN
litemall-core/src/main/resources/back.jpg