Maison  >  Article  >  Java  >  Exemple de code pour implémenter la fonction de code QR en Java

Exemple de code pour implémenter la fonction de code QR en Java

黄舟
黄舟original
2017-03-09 10:57:291611parcourir

L'article d'aujourd'hui utilise principalement Java pour implémenter la fonction QR code. L'idée de​​cet article est claire. Les amis qui en ont besoin peuvent s'y référer

J'ai soudain eu envie d'écrire quelques articles récemment. , j'ai donc écrit quelques ressentis les uns après les autres. Quelques codes techniques qui sont utiles et peuvent être utilisés par tout le monde. Faciliter l’apprentissage mutuel et la communication.

L'article d'aujourd'hui utilise principalement Java pour implémenter les codes QR :

Parlons de l'idée générale avant d'écrire le code pour faciliter une implémentation meilleure et plus rapide de la fonction.

(1). Tout d'abord, pour implémenter la fonction de code QR, vous devez importer le package jar principal de com.google.zxing. Ce que j'ai importé ici est core-3.2.1.jar ;

( 2). Le soi-disant code QR n'est rien de plus que de mettre le contenu requis dans une image, nous créons donc ici d'abord une image avec le contenu des paramètres. La méthode est la suivante :

.

private static BufferedImage createImage(String content, String imgPath, boolean needCompress) throws Exception {
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
hints.put(EncodeHintType.MARGIN, 1);
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE,
hints);
int width = bitMatrix.getWidth();
int height = bitMatrix.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
}
}
if (imgPath == null || "".equals(imgPath)) {
return image;
}
// 插入图片
QRCodeUtil.insertImage(image, imgPath, needCompress);
return image;
}
//插入logo 如不需要logo可以执行此方法
private static void insertImage(BufferedImage source, String imgPath, boolean needCompress) throws Exception {
File file = new File(imgPath);
if (!file.exists()) {
System.err.println("" + imgPath + "  该文件不存在!");
return;
}
Image src = ImageIO.read(new File(imgPath));
int width = src.getWidth(null);
int height = src.getHeight(null);
if (needCompress) { // 压缩LOGO
if (width > WIDTH) {
width = WIDTH;
}
if (height > HEIGHT) {
height = HEIGHT;
}
Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); // 绘制缩小后的图
g.dispose();
src = image;
}
// 插入LOGO
Graphics2D graph = source.createGraphics();
int x = (QRCODE_SIZE - width) / 2;
int y = (QRCODE_SIZE - height) / 2;
graph.drawImage(src, x, y, width, height, null);
Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);
graph.setStroke(new BasicStroke(3f));
graph.draw(shape);
graph.dispose();
}

(3) À ce stade, la méthode de génération d'une image de code QR n'est-elle pas très simple ? .

/**
* 生成二维码(内嵌LOGO)
* 
* @param content
*      内容
* @param imgPath
*      LOGO地址
* @param destPath
*      存放目录
* @param needCompress
*      是否压缩LOGO
* @throws Exception
*/
public static void encode(String content, String imgPath, String destPath, boolean needCompress) throws Exception {
BufferedImage image = QRCodeUtil.createImage(content, imgPath, needCompress);
mkdirs(destPath);
String file = new Random().nextInt(99999999) + ".jpg";
ImageIO.write(image, FORMAT_NAME, new File(destPath + "/" + file));
}
/**
* 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常)
* 
* @author LongJin
* @date 2013-12-11 上午10:16:36
* @param destPath
*      存放目录
*/
public static void mkdirs(String destPath) {
File file = new File(destPath);
// 当文件夹不存在时,mkdirs会自动创建多层目录,区别于mkdir.(mkdir如果父目录不存在则会抛出异常)
if (!file.exists() && !file.isDirectory()) {
file.mkdirs();
}
}

(4) Si vous ne voulez pas de logo, transmettez simplement le chemin d'accès au logo comme nul lors de l'appel.

(5). À ce stade, un outil de génération de code QR est terminé. Bien sûr, quelqu'un devra peut-être analyser le code QR, je vais donc également écrire ici la méthode d'analyse du code QR, ce qui me convient également. Revenez plus tard.

/**
* 解析二维码
* 
* @param file
*      二维码图片
* @return
* @throws Exception
*/
public static String decode(File file) throws Exception {
BufferedImage image;
image = ImageIO.read(file);
if (image == null) {
return null;
}
BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
Result result;
Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
hints.put(DecodeHintType.CHARACTER_SET, CHARSET);
result = new MultiFormatReader().decode(bitmap, hints);
String resultStr = result.getText();
return resultStr;
}


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn