Heim php教程 PHP开发 Detaillierte Erklärung und Analyse, wie ZXing-core QR-Codes generiert

Detaillierte Erklärung und Analyse, wie ZXing-core QR-Codes generiert

Jan 07, 2017 am 10:55 AM

QR-Codes gibt es überall, scannen Sie sie und Sie erhalten Geschenke. Jetzt, da QR-Codes so beliebt sind, müssen Sie sich nicht ganz im Klaren darüber sein, wie QR-Codes generiert werden, um Ihnen beim Erlernen von QR zu helfen Codes. So generieren Sie einen QR-Code.

Tatsächlich wird diese Funktion hauptsächlich durch die Verwendung des von der Brille freigegebenen Glases verwendet.

1. Generierung des QR-Codes

Fügen Sie das Zxing-core.jar-Paket zum Klassenpfad hinzu.

Die Generierung des QR-Codes erfordert die Hilfe der MatrixToImageWriter-Klasse, die von Google bereitgestellt wird. Sie können diese Klasse in den Quellcode kopieren und Sie können ihn verwenden direkt.

Code, der QR-Codes direkt generieren kann

public void test1() throws Exception{ 
String content = "www.baidu.com"; 
String path = "d://"; 
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();//Zxing是Google提供的关于条码 
Map hints = new HashMap(); 
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); 
BitMatrix bitMatrix = multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, 400, 400,hints);//这里是照片的大小 
File file1 = new File(path,"my.jpg"); 
MatrixToImageWriter.writeToFile(bitMatrix, "jpg", file1); 
System.out.println("执行完毕"); 
}

Wenn wir nach dem Kopieren dieses Codes herausfinden können, dass ein MatrixToImageWriter-Fehler vorliegt, müssen wir ihn finden, aber Ich habe es hier gepostet. Der Code kann direkt verwendet werden.

import com.google.zxing.common.BitMatrix; 
import javax.imageio.ImageIO; 
import java.io.File; 
import java.io.OutputStream; 
import java.io.IOException; 
import java.awt.image.BufferedImage; 
public final class MatrixToImageWriter { 
private static final int BLACK = 0xFF000000; 
private static final int WHITE = 0xFFFFFFFF; 
private MatrixToImageWriter() {} 
public static BufferedImage toBufferedImage(BitMatrix matrix) { 
int width = matrix.getWidth(); 
int height = matrix.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, matrix.get(x, y) ? BLACK : WHITE); 
} 
} 
return image; 
} 
public static void writeToFile(BitMatrix matrix, String format, File file) 
throws IOException { 
BufferedImage image = toBufferedImage(matrix); 
if (!ImageIO.write(image, format, file)) { 
throw new IOException("Could not write an image of format " + format + " to " + file); 
} 
} 
public static void writeToStream(BitMatrix matrix, String format, OutputStream stream) 
throws IOException { 
BufferedImage image = toBufferedImage(matrix); 
if (!ImageIO.write(image, format, stream)) { 
throw new IOException("Could not write an image of format " + format); 
} 
} 
}

Jetzt können Sie den generierten QR-Code aus dem Stammverzeichnis von Laufwerk d herunterladen

QR-Code-Analyse

Wie bei der Generierung benötigen wir eine Hilfsklasse (BufferedImageLuminanceSource ), dieser Typ wird auch von Google bereitgestellt. Sie können ihn auch kopieren und direkt verwenden, was Ihnen die Suche nach

BufferedImageLuminanceSource 
import com.google.zxing.LuminanceSource; 
import java.awt.Graphics2D; 
import java.awt.geom.AffineTransform; 
import java.awt.image.BufferedImage; 
public final class BufferedImageLuminanceSource extends LuminanceSource { 
private final BufferedImage image; 
private final int left; 
private final int top; 
public BufferedImageLuminanceSource(BufferedImage image) { 
this(image, 0, 0, image.getWidth(), image.getHeight()); 
} 
public BufferedImageLuminanceSource(BufferedImage image, int left, int top, int width, int height) { 
super(width, height); 
int sourceWidth = image.getWidth(); 
int sourceHeight = image.getHeight(); 
if (left + width > sourceWidth || top + height > sourceHeight) { 
throw new IllegalArgumentException("Crop rectangle does not fit within image data."); 
} 
for (int y = top; y < top + height; y++) { 
for (int x = left; x < left + width; x++) { 
if ((image.getRGB(x, y) & 0xFF000000) == 0) { 
image.setRGB(x, y, 0xFFFFFFFF); // = white 
} 
} 
} 
this.image = new BufferedImage(sourceWidth, sourceHeight, BufferedImage.TYPE_BYTE_GRAY); 
this.image.getGraphics().drawImage(image, 0, 0, null); 
this.left = left; 
this.top = top; 
} 
@Override
public byte[] getRow(int y, byte[] row) { 
if (y < 0 || y >= getHeight()) { 
throw new IllegalArgumentException("Requested row is outside the image: " + y); 
} 
int width = getWidth(); 
if (row == null || row.length < width) { 
row = new byte[width]; 
} 
image.getRaster().getDataElements(left, top + y, width, 1, row); 
return row; 
} 
@Override
public byte[] getMatrix() { 
int width = getWidth(); 
int height = getHeight(); 
int area = width * height; 
byte[] matrix = new byte[area]; 
image.getRaster().getDataElements(left, top, width, height, matrix); 
return matrix; 
} 
@Override
public boolean isCropSupported() { 
return true; 
} 
@Override
public LuminanceSource crop(int left, int top, int width, int height) { 
return new BufferedImageLuminanceSource(image, this.left + left, this.top + top, width, height); 
} 
@Override
public boolean isRotateSupported() { 
return true; 
} 
@Override
public LuminanceSource rotateCounterClockwise() { 
int sourceWidth = image.getWidth(); 
int sourceHeight = image.getHeight(); 
AffineTransform transform = new AffineTransform(0.0, -1.0, 1.0, 0.0, 0.0, sourceWidth); 
BufferedImage rotatedImage = new BufferedImage(sourceHeight, sourceWidth, BufferedImage.TYPE_BYTE_GRAY); 
Graphics2D g = rotatedImage.createGraphics(); 
g.drawImage(image, transform, null); 
g.dispose(); 
int width = getWidth(); 
return new BufferedImageLuminanceSource(rotatedImage, top, sourceWidth - (left + width), getHeight(), width); 
} 
}

Code zum Parsen von QR-Code< erspart 🎜>

MultiFormatReader formatReader = new MultiFormatReader(); 
String filePath = "图片的路径"; 
File file = new File(filePath); 
BufferedImage image = ImageIO.read(file);; 
LuminanceSource source = new BufferedImageLuminanceSource(image); 
Binarizer binarizer = new HybridBinarizer(source); 
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer); 
Map hints = new HashMap(); 
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); 
Result result = formatReader.decode(binaryBitmap,hints); 
System.out.println("result = "+ result.toString()); 
System.out.println("resultFormat = "+ result.getBarcodeFormat()); 
System.out.println("resultText = "+ result.getText()); 
tch (Exception e) { 
e.printStackTrace();
Jetzt können Sie den Inhalt des QR-Codes in der Konsole sehen.

Das Obige ist die vom Herausgeber vorgestellte Methode und Analyse der Methode von ZXing-core. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht Antworte allen umgehend. Ich möchte mich auch bei Ihnen allen für Ihre Unterstützung der chinesischen PHP-Website bedanken!

Ausführlichere Erklärungen zur Generierung von QR-Codes durch ZXing-core und eine Analyse verwandter Artikel finden Sie auf der chinesischen PHP-Website!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1510
276