java生成二维码
来源:互联网 发布:印度实力知乎 编辑:程序博客网 时间:2024/05/24 15:41
现在比较有名的java开源二维码工具有google的zxing,本文记录生成常见的qrcode过程
1、加入maven依赖
<!-- zxing --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>2.2</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>2.2</version></dependency>
2、java示例
import java.awt.image.BufferedImage;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.HashMap;import java.util.Map;import javax.imageio.ImageIO;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.google.zxing.BarcodeFormat;import com.google.zxing.BinaryBitmap;import com.google.zxing.EncodeHintType;import com.google.zxing.MultiFormatReader;import com.google.zxing.MultiFormatWriter;import com.google.zxing.NotFoundException;import com.google.zxing.Result;import com.google.zxing.WriterException;import com.google.zxing.client.j2se.BufferedImageLuminanceSource;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;public class QRCodeHelper {private static final Log logger = LogFactory.getLog(QRCodeHelper.class);private static final String charset = "UTF-8"; // or "ISO-8859-1"/** * 生成二维码图片 * @param qrCodeData 原文字 * @param qrCodeheight 高度 * @param qrCodewidth 宽度 * @return */public static BufferedImage createImage(String qrCodeData, int qrCodeheight, int qrCodewidth){Map<EncodeHintType, Object> hintMap = new HashMap<EncodeHintType, Object>();hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);//容错率hintMap.put(EncodeHintType.MARGIN, 0);//外边距BitMatrix matrix = null;try {matrix = new MultiFormatWriter().encode(new String(qrCodeData.getBytes(charset), charset),BarcodeFormat.QR_CODE, qrCodewidth, qrCodeheight, hintMap);} catch (UnsupportedEncodingException e) {logger.error(e.getMessage());} catch (WriterException e) {logger.error(e.getMessage());}return MatrixToImageWriter.toBufferedImage(matrix);}/** * 读取二维码 * @param filePath 文件路径 * @param charset 文件编码 * @param hintMap 二维码配置 * @return * @throws FileNotFoundException * @throws IOException * @throws NotFoundException */public static String readQRCode(String filePath, String charset, Map hintMap)throws FileNotFoundException, IOException, NotFoundException {BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(ImageIO.read(new FileInputStream(filePath)))));Result qrCodeResult = new MultiFormatReader().decode(binaryBitmap,hintMap);return qrCodeResult.getText();}}
该程序生成的二维码可以在网页上面显示,可以被大部分二维码工具扫描,若想在纸张或者海报上,还需要调整图片的分辨率。java 有生成tif格式图片的工具JAI_ImageIO_1.1,需要加入JAI_ImageIO_1.1.jar包,下载地址http://download.csdn.net/detail/ccl_space/7029687
import java.awt.image.BufferedImage;import java.awt.image.RenderedImage;import java.io.File;import java.util.Iterator;import javax.imageio.IIOImage;import javax.imageio.ImageIO;import javax.imageio.ImageTypeSpecifier;import javax.imageio.ImageWriter;import javax.imageio.metadata.IIOInvalidTreeException;import javax.imageio.metadata.IIOMetadata;import javax.imageio.metadata.IIOMetadataNode;import javax.imageio.stream.FileImageOutputStream;import com.sun.media.imageio.plugins.tiff.BaselineTIFFTagSet;import com.sun.media.imageio.plugins.tiff.TIFFDirectory;import com.sun.media.imageio.plugins.tiff.TIFFField;import com.sun.media.imageio.plugins.tiff.TIFFTag;/** * 设置自定义dpi值到TIFF格式图像的样例程序。 * 需要 JAI_ImageIO_1.1 提供支持。 */public class SetDPI4TIFF { private static String METADATA_NAME = "com_sun_media_imageio_plugins_tiff_image_1.0"; private static int DPI_X = 300; private static int DPI_Y = 300; public static void main(String[] args) throws Throwable { // Create sample image. RenderedImage image = new BufferedImage(256, 256, BufferedImage.TYPE_3BYTE_BGR);// RenderedImage image = ImageIO.read(new File("e:\\700.png")); // Get TIFF writer. Iterator writers = ImageIO.getImageWritersByFormatName("TIFF"); if (writers == null || !writers.hasNext()) { throw new IllegalStateException("No TIFF writers!"); } ImageWriter writer = (ImageWriter) writers.next(); // Get the default image metadata. ImageTypeSpecifier imageType = ImageTypeSpecifier.createFromRenderedImage(image); IIOMetadata imageMetadata = writer.getDefaultImageMetadata(imageType, null); // Set DPI. String fileName; String methodology; if (args.length == 0 || args[0].equalsIgnoreCase("DOM")) { fileName = "dpi_dom.tif"; setDPIViaDOM(imageMetadata); methodology = "DOM"; } else { fileName = "dpi_api.tif"; imageMetadata = setDPIViaAPI(imageMetadata); methodology = "API"; } System.out.println(" Writing " + fileName + " using " + methodology + " methodology "); // Write image. writer.setOutput(new FileImageOutputStream(new File(fileName))); writer.write(new IIOImage(image, null, imageMetadata)); } /** * Set DPI using DOM nodes. */ private static void setDPIViaDOM(IIOMetadata imageMetadata) throws IIOInvalidTreeException { // Get the DOM tree. IIOMetadataNode root = (IIOMetadataNode) imageMetadata.getAsTree(METADATA_NAME); // Get the IFD. IIOMetadataNode ifd = (IIOMetadataNode) root.getElementsByTagName("TIFFIFD").item(0); // Get {X,Y}Resolution tags. BaselineTIFFTagSet base = BaselineTIFFTagSet.getInstance(); TIFFTag tagXRes = base.getTag(BaselineTIFFTagSet.TAG_X_RESOLUTION); TIFFTag tagYRes = base.getTag(BaselineTIFFTagSet.TAG_Y_RESOLUTION); // Create {X,Y}Resolution nodes. IIOMetadataNode nodeXRes = createRationalNode(tagXRes.getName(), tagXRes.getNumber(), DPI_X, 1); IIOMetadataNode nodeYRes = createRationalNode(tagYRes.getName(), tagYRes.getNumber(), DPI_Y, 1); // Append {X,Y}Resolution nodes to IFD node. ifd.appendChild(nodeXRes); ifd.appendChild(nodeYRes); // Set metadata from tree. imageMetadata.setFromTree(METADATA_NAME, root); } /** * Creates a node of TIFF data type RATIONAL. */ private static IIOMetadataNode createRationalNode(String tagName, int tagNumber, int numerator, int denominator) { // Create the field node with tag name and number. IIOMetadataNode field = new IIOMetadataNode("TIFFField"); field.setAttribute("name", tagName); field.setAttribute("number", "" + tagNumber); // Create the RATIONAL node. IIOMetadataNode rational = new IIOMetadataNode("TIFFRational"); rational.setAttribute("value", numerator + "/" + denominator); // Create the RATIONAL node and append RATIONAL node. IIOMetadataNode rationals = new IIOMetadataNode("TIFFRationals"); rationals.appendChild(rational); // Append RATIONALS node to field node. field.appendChild(rationals); return field; } /** * Set DPI using API. */ private static IIOMetadata setDPIViaAPI(IIOMetadata imageMetadata) throws IIOInvalidTreeException { // Derive the TIFFDirectory from the metadata. TIFFDirectory dir = TIFFDirectory.createFromMetadata(imageMetadata); // Get {X,Y}Resolution tags. BaselineTIFFTagSet base = BaselineTIFFTagSet.getInstance(); TIFFTag tagXRes = base.getTag(BaselineTIFFTagSet.TAG_X_RESOLUTION); TIFFTag tagYRes = base.getTag(BaselineTIFFTagSet.TAG_Y_RESOLUTION); // Create {X,Y}Resolution fields. TIFFField fieldXRes = new TIFFField(tagXRes, TIFFTag.TIFF_RATIONAL, 1, new long[][]{{DPI_X, 1}}); TIFFField fieldYRes = new TIFFField(tagYRes, TIFFTag.TIFF_RATIONAL, 1, new long[][]{{DPI_Y, 1}}); // Append {X,Y}Resolution fields to directory. dir.addTIFFField(fieldXRes); dir.addTIFFField(fieldYRes); // Convert to metadata object and return. return dir.getAsMetadata(); }}
0 0
- java二维码 生成二维码
- Java生成二维码解析二维码
- java 生成二维码,解析二维码
- Java生成PDF417二维码
- Java 生成二维码
- java生成二维码
- java生成二维码
- java生成二维码
- JAVA 生成二维码 代码
- Java 生成二维码
- java 二维码生成
- java二维码生成
- JAVA生成解析二维码
- Java 生成二维码
- java 生成二维码
- java生成二维码
- Java生成二维码
- java生成二维码图片
- 编程找出1000以内的所有完数
- Java中控制小数位数
- 创建不规则UIView(适用于一切UIView的子类)
- 今天受到点心理伤害,写点东西补充下
- 《Head First 设计模式》单件模式
- java生成二维码
- POJ 3311 旅行商问题 状态压缩 dp
- 一个Oracle循环例子
- 指针二维数组的传递与函数参数
- 学习版本控制工具Git
- asp.net 的XML操作
- 小球落地n次后,经过的距离
- Protocol Buffer技术详解(语言规范)
- Java finally语句到底是在return之前还是之后执行?