| | |
| | | |
| | | |
| | | import com.google.zxing.*; |
| | | import com.google.zxing.client.j2se.MatrixToImageWriter; |
| | | import com.google.zxing.common.BitMatrix; |
| | | import com.google.zxing.common.HybridBinarizer; |
| | | import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; |
| | |
| | | import java.io.FileNotFoundException; |
| | | import java.io.IOException; |
| | | import java.io.OutputStream; |
| | | import java.nio.file.Path; |
| | | import java.nio.file.Paths; |
| | | import java.util.HashMap; |
| | | import java.util.Hashtable; |
| | | import java.util.Map; |
| | | |
| | | public class QRCodeUtil { |
| | | private static final String CHARSET = "utf-8"; |
| | |
| | | QRCodeUtil.encode(content, null, outputStream, false); |
| | | } |
| | | |
| | | public static String decode(File file) throws IOException, NotFoundException { |
| | | public static String decode(File file) throws IOException, NotFoundException |
| | | { |
| | | BufferedImage image; |
| | | image = ImageIO.read(file); |
| | | if (image == null) { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | //二维码图上带字 |
| | | public static void contextLoads2(String content, String name, String filePathStr) |
| | | { |
| | | int qrCodeWidth = 700; |
| | | int qrCodeHeight = 700; |
| | | int textPadding = 5; // 文本与二维码之间的间距 |
| | | int textSize = 30; // 文本字体大小 |
| | | int totalHeight = qrCodeHeight + 300; |
| | | |
| | | try { |
| | | // 生成二维码的BitMatrix |
| | | BitMatrix bitMatrix = generateQRCode(content, qrCodeWidth, qrCodeHeight); |
| | | |
| | | // 将BitMatrix转换为BufferedImage |
| | | BufferedImage qrCodeImage = MatrixToImageWriter.toBufferedImage(bitMatrix); |
| | | |
| | | // 创建一个新的BufferedImage来容纳二维码和文本 |
| | | BufferedImage combinedImage = new BufferedImage( |
| | | qrCodeWidth, 900, BufferedImage.TYPE_INT_RGB); |
| | | |
| | | // 绘制二维码到新的BufferedImage上 |
| | | Graphics2D g2d = combinedImage.createGraphics(); |
| | | g2d.setColor(Color.WHITE); |
| | | g2d.fillRect(0, 0, qrCodeWidth, 900); |
| | | g2d.drawImage(qrCodeImage, 0, 0, null); |
| | | |
| | | // 设置文本样式 |
| | | Font font = new Font("BLACK", Font.PLAIN, textSize); |
| | | g2d.setFont(font); |
| | | g2d.setColor(Color.BLACK); // 文本颜色 |
| | | |
| | | // 绘制文本到图片下方 |
| | | FontMetrics metrics = g2d.getFontMetrics(); |
| | | int textX = (qrCodeWidth - metrics.stringWidth("沈丘惠企执法")) / 2; |
| | | int textX1 = (qrCodeWidth - metrics.stringWidth(name)) / 2; |
| | | int textY = qrCodeHeight + textPadding; |
| | | g2d.drawString("沈丘惠企执法", textX, textY); |
| | | g2d.drawString(name, textX1, textY+50); |
| | | |
| | | g2d.dispose(); |
| | | |
| | | // 指定存储图片的路径 |
| | | Path filePath = Paths.get(filePathStr); |
| | | |
| | | // 确保文件路径的父目录存在 |
| | | filePath.getParent().toFile().mkdirs(); |
| | | |
| | | // 保存图片到文件 |
| | | ImageIO.write(combinedImage, "PNG", filePath.toFile()); |
| | | |
| | | System.out.println("QR Code with text has been generated: " + filePath.toAbsolutePath()); |
| | | } catch (WriterException | IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | private static BitMatrix generateQRCode(String text, int width, int height) throws WriterException |
| | | { |
| | | Map<EncodeHintType, Object> hints = new HashMap<>(); |
| | | hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); |
| | | return new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints); |
| | | } |
| | | |
| | | } |
| | | |