前段时间搞了一个二维码生成,搞定之后将代码分享出来,直接上代码
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.metadata.IIOMetadataNode;
import javax.imageio.stream.ImageOutputStream;
import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.io.FileUtils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import sun.font.FontDesignMetrics;
/**
* <pre>
* 二维码工具类
* </pre>
*
* @author naveu
* @date 2018年7月19日 下午3:08:36
*/
@SuppressWarnings("restriction")
public class QRCodeUtils2 {
private QRCodeUtils2() {}
private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;
/**
* <pre>
* 生成二维码图片对象
* </pre>
* @author naveu
* @date 2018年8月6日 下午12:44:27
* @param qrUrl 二维码链接
* @param qrLen 二维码边长,正方形
* @return
* @throws WriterException
*/
public static BufferedImage getQRImg(String qrUrl, int qrLen) throws WriterException {
Hashtable<EncodeHintType, Object> hints = new Hashtable<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.MARGIN, 1);
BitMatrix matrix = new MultiFormatWriter().encode(qrUrl, BarcodeFormat.QR_CODE, qrLen, qrLen, hints);
BufferedImage image = new BufferedImage(qrLen, qrLen, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < qrLen; x++) {
for (int y = 0; y < qrLen; y++) {
image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
}
}
return image;
}
/**
* <pre>
* 获取字体宽度
* </pre>
* @author naveu
* @date 2018年8月6日 下午12:44:36
* @param font 字体
* @param text 字符内容
* @return
*/
public static int getFontWidth(Font font,