|
|
@@ -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));
|