请用java BufferedImage 绘制一张设备铭牌:1 顶部为设备名称字体为白色内容为:1#配电房2 中间区域用白色圆角矩形圈住中间放置二维码3 二维码底部添加多行文字:- 编号:123- 型号:1000 2342- 类别:机械类- 位置:合金产线4 外围颜色为#1e4299将中间包裹住6 底部为公司名称字体为白色内容为:xxx有限公司
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class DeviceNameplate {
private static final String DEVICE_NAME = "1#配电房";
private static final String[] TEXT_LINES = {"编号:123", "型号:1000 * 2342", "类别:机械类", "位置:合金产线"};
private static final String COMPANY_NAME = "xxx有限公司";
private static final Color BORDER_COLOR = new Color(30, 66, 153);
private static final int IMAGE_WIDTH = 400;
private static final int IMAGE_HEIGHT = 200;
private static final int BORDER_PADDING = 10;
private static final int BORDER_WIDTH = 5;
private static final int CORNER_RADIUS = 10;
private static final int QR_CODE_SIZE = 100;
private static final int QR_CODE_PADDING = 20;
private static final Font DEVICE_NAME_FONT = new Font("Arial", Font.BOLD, 30);
private static final Font TEXT_FONT = new Font("Arial", Font.PLAIN, 15);
private static final Font COMPANY_NAME_FONT = new Font("Arial", Font.BOLD, 20);
public static void main(String[] args) throws IOException {
BufferedImage image = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
// Draw device name
g2d.setColor(Color.WHITE);
g2d.setFont(DEVICE_NAME_FONT);
FontRenderContext frc = g2d.getFontRenderContext();
TextLayout layout = new TextLayout(DEVICE_NAME, DEVICE_NAME_FONT, frc);
Rectangle2D bounds = layout.getBounds();
int x = (int) ((IMAGE_WIDTH - bounds.getWidth()) / 2);
int y = BORDER_PADDING + (int) bounds.getHeight();
layout.draw(g2d, x, y);
// Draw border
g2d.setColor(BORDER_COLOR);
g2d.setStroke(new BasicStroke(BORDER_WIDTH));
RoundRectangle2D border = new RoundRectangle2D.Double(BORDER_PADDING, y + BORDER_PADDING, IMAGE_WIDTH - BORDER_PADDING * 2, QR_CODE_SIZE + QR_CODE_PADDING * 2 + TEXT_LINES.length * TEXT_FONT.getSize() + BORDER_PADDING * 2, CORNER_RADIUS, CORNER_RADIUS);
g2d.draw(border);
// Draw QR code
BufferedImage qrCode = generateQRCode("https://www.example.com", QR_CODE_SIZE, QR_CODE_SIZE);
int qrCodeX = (int) border.getCenterX() - QR_CODE_SIZE / 2;
int qrCodeY = (int) border.getY() + QR_CODE_PADDING;
g2d.drawImage(qrCode, qrCodeX, qrCodeY, null);
// Draw text
g2d.setColor(Color.BLACK);
g2d.setFont(TEXT_FONT);
int textX = (int) border.getX() + QR_CODE_SIZE + QR_CODE_PADDING * 2;
int textY = qrCodeY + QR_CODE_SIZE / 2 - TEXT_LINES.length * TEXT_FONT.getSize() / 2;
for (String line : TEXT_LINES) {
layout = new TextLayout(line, TEXT_FONT, frc);
layout.draw(g2d, textX, textY);
textY += layout.getBounds().getHeight();
}
// Draw company name
g2d.setColor(Color.WHITE);
g2d.setFont(COMPANY_NAME_FONT);
layout = new TextLayout(COMPANY_NAME, COMPANY_NAME_FONT, frc);
bounds = layout.getBounds();
x = (int) ((IMAGE_WIDTH - bounds.getWidth()) / 2);
y = IMAGE_HEIGHT - BORDER_PADDING - (int) bounds.getHeight();
layout.draw(g2d, x, y);
g2d.dispose();
ImageIO.write(image, "png", new File("device_nameplate.png"));
}
private static BufferedImage generateQRCode(String text, int width, int height) {
// Implementation of QR code generation using a third-party library
return null;
}
}
原文地址: https://www.cveoy.top/t/topic/bX3I 著作权归作者所有。请勿转载和采集!