diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/qcode/QCodeService.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/qcode/QCodeService.java index df0a2d0d..cb053d2e 100644 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/qcode/QCodeService.java +++ b/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)); diff --git a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java b/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java index 28ac86fa..a3b788f6 100644 --- a/litemall-core/src/main/java/org/linlinjava/litemall/core/system/SystemConfig.java +++ b/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; diff --git a/litemall-core/src/main/resources/back.jpg b/litemall-core/src/main/resources/back.jpg index 159bfdac..a792671f 100644 Binary files a/litemall-core/src/main/resources/back.jpg and b/litemall-core/src/main/resources/back.jpg differ