perf: 优化设备二维码显示效果
This commit is contained in:
parent
50b2d81ec5
commit
d6ff7814fc
|
|
@ -18,6 +18,6 @@ public class DeviceQRCodeService {
|
|||
|
||||
public byte[] generate(String deviceNo, String modelNo) throws Exception {
|
||||
ParamConfig config = paramConfigService.lambdaQuery().eq(ParamConfig::getCode, "DeviceQRCodeHost").one();
|
||||
return QRCodeUtil.generateDeviceQRCode(deviceNo ,StrUtil.format(config.getValue(), deviceNo,modelNo),200, 200);
|
||||
return QRCodeUtil.generateDeviceQRCode(deviceNo, StrUtil.format(config.getValue(), deviceNo, modelNo), 550, 550);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import javax.imageio.ImageIO;
|
|||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.util.Hashtable;
|
||||
|
||||
public class QRCodeUtil {
|
||||
|
|
@ -48,16 +49,16 @@ public class QRCodeUtil {
|
|||
|
||||
/**
|
||||
* 为图片添加边框和文字
|
||||
*
|
||||
* @param qrImage 原始二维码图片
|
||||
* @param text 要添加的文字
|
||||
* @return 带边框和文字的新图片
|
||||
*/
|
||||
private static BufferedImage addBorderAndText(BufferedImage qrImage, String text) {
|
||||
private static BufferedImage addBorderAndText(BufferedImage qrImage, String text) throws Exception {
|
||||
int borderSize = 1;
|
||||
int extend=10;
|
||||
int newWidth = qrImage.getWidth() + extend;
|
||||
int newHeight = qrImage.getHeight() + extend;
|
||||
int extend1 = 10;
|
||||
int extend2 = 50;
|
||||
int newWidth = qrImage.getWidth() + extend1;
|
||||
int newHeight = qrImage.getHeight() + extend2;
|
||||
// 创建新画布(扩大尺寸以容纳边框)
|
||||
BufferedImage newImage = new BufferedImage(
|
||||
newWidth,
|
||||
|
|
@ -65,11 +66,12 @@ public class QRCodeUtil {
|
|||
BufferedImage.TYPE_INT_RGB
|
||||
);
|
||||
Graphics2D g = newImage.createGraphics();
|
||||
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
// 填充边框颜色
|
||||
g.setColor(Color.WHITE);
|
||||
g.fillRect(0, 0, newWidth, newHeight);
|
||||
// 绘制原始二维码(居中)
|
||||
g.drawImage(qrImage, borderSize + extend / 2, borderSize, null);
|
||||
g.drawImage(qrImage, borderSize + extend1 / 2, borderSize, null);
|
||||
// 绘制边框
|
||||
g.setColor(Color.BLACK);
|
||||
g.setStroke(new BasicStroke(borderSize));
|
||||
|
|
@ -79,13 +81,14 @@ public class QRCodeUtil {
|
|||
g.drawLine(0, newHeight - borderSize, newWidth, newHeight - borderSize);
|
||||
// 添加文字(居中显示)
|
||||
g.setColor(Color.BLACK);
|
||||
g.setFont(new Font("Arial", Font.PLAIN, 14));
|
||||
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
InputStream is = QRCodeUtil.class.getResourceAsStream("/fonts/simsun.ttc");
|
||||
Font baseFont = Font.createFont(Font.TRUETYPE_FONT, is).deriveFont(Font.BOLD, 45.0f);
|
||||
g.setFont(baseFont);
|
||||
FontMetrics fm = g.getFontMetrics();
|
||||
int textWidth = fm.stringWidth(text);
|
||||
int x = (newImage.getWidth() - textWidth) / 2;
|
||||
int y = newImage.getHeight() - 15;
|
||||
g.drawString(text, x, y);
|
||||
g.drawString(text, x, qrImage.getHeight() + (extend2 - fm.getAscent()) / 2);
|
||||
is.close();
|
||||
g.dispose();
|
||||
return newImage;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue