Java QR코드 기능 구현 인스턴스 코드

4754 단어 javaQR코드
최근에 갑자기 글을 쓰고 싶어서 자기 감각이 유용하고 여러분도 사용할 수 있는 기술 코드를 계속해서 작성하고 있습니다.서로 공부하고 교류하기 편리하다.
오늘 이 글은 주로 Java를 이용하여 QR코드를 실현하는 것입니다.
코드를 쓰기 전에 먼저 전체적인 사고방식을 말해서 더욱 편리하고 신속하게 기능을 실현할 수 있도록 한다.
(1).우선 QR코드 기능을 실현하려면com을 가져와야 한다.google.zxing의 핵심jar 패키지, 제가 가져온 것은 코어-3.2.1입니다.jar;
(2).QR코드란 필요한 내용을 한 장의 사진에 넣는 것이 아니기 때문에 우선 파라미터가 있는 그림을 만드는 것이다. 방법은 다음과 같다.

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).이로써 QR코드 이미지 생성 방법은 다 썼습니다. 간단하지 않습니까? 다음은 이 방법을 호출하는 것입니다.

/**
*  ( 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).로고가 없으면 호출할 때 로고의 경로를null로 전송하면 됩니다.
(5).이로써 QR코드 생성 도구가 완성되었습니다. 물론 누군가가 QR코드를 해석해야 할 수도 있기 때문에 여기서 QR코드 해석 방법도 작성하고 나중에 볼 수 있습니다.

/**
*  
* 
* @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;
}
위에서 말한 것은 여러분이 소개한 자바가 QR코드 기능을 실현하는 실례 코드입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기