자바 에서 zxing 을 사용 하여 QR 코드 입 패 를 대량 생 성 합 니 다.
단계:
1).배경 그림 을 작성 하고 다음 그림 을 보 여 줍 니 다.
2).QR 코드 BufferedImage 대상 생 성.코드 는 다음 과 같 습 니 다:
/**
*
* @Title: toBufferedImage
* @Description:
* @param text
*
* @param width
*
* @param height
*
* @param
* @param Exception
*
* @return BufferedImage
* @throws
*/
public static BufferedImage toBufferedImage(String text, int width,
int height) throws Exception {
int BLACK = 0xFF000000;
int WHITE = 0xFFFFFFFF;
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); //
hints.put(EncodeHintType.MARGIN, 1);
BitMatrix matrix = new MultiFormatWriter().encode(text,
BarcodeFormat.QR_CODE, width, height, hints);
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;
}
3).입 패 배경 그림 의 지정 한 위치 에 QR 코드 를 생 성 합 니 다.코드 는 다음 과 같 습 니 다.
/**
*
* @Title: markImageByCode
* @Description:
* @param img
* image
* @param srcImgPath
*
* @param targerPath
*
* @param positionWidth
*
* @param positionHeight
*
* @return void
* @throws
*/
public static void markImageByCode(Image img, String srcImgPath,
String targerPath, int positionWidth, int positionHeight) {
OutputStream os = null;
try {
Image srcImg = ImageIO.read(new File(srcImgPath));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 1、
Graphics2D g = buffImg.createGraphics();
// 2、
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 3、
g.drawImage(img, positionWidth, positionHeight, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
// 4、
g.dispose();
// 5、 ( PNG ,jpg )
os = new FileOutputStream(targerPath);
ImageIO.write(buffImg, "PNG", os);
System.out.println(" ");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4).입 패 에 입 패 번 호 를 붙인다
/**
*
* @Title: pressText
* @Description:
* @param pressText
*
* @param srcImageFile
*
* @param destImageFile
*
* @param x
*
* @param y
*
* @param alpha
*
* @return void
* @throws
*/
public final static void pressText(String pressText, String srcImageFile,
String destImageFile, int x, int y, float alpha) {
try {
File img = new File(srcImageFile);
Image src = ImageIO.read(img);
int width = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
//
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.drawImage(src, 0, 0, width, height, null);
//
g.setColor(new Color(89, 87, 87));
// Font
g.setFont(new Font(" _GBK", Font.BOLD, 14));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// -> , -> (x,y) .
g.drawString(pressText, x, y);
g.dispose();
ImageIO.write((BufferedImage) image, "PNG", new File(destImageFile));//
} catch (Exception e) {
e.printStackTrace();
}
}
예시:코드:
테스트 코드
public class codeTest {
public static void main(String[] args) throws Exception {
String text = "http://www.xxx.com/"; //
//
//
String targetPath = "f:/qrcode/targetimg/" + Utils.toStr();
//
Utils.makeDirs(targetPath);
int begin = 100;//code
int end = 101;//code
for (int i = begin; i <= end; i++) {
// 16 20161214000001
String code = Utils.toStr() + Utils.formateNumber(i);
//
BufferedImage image = Utils.toBufferedImage(text
+ "?payCode=" + code,240,240);
// +
Utils.markImageByCode(image, "f:/qrcode/srcimg/src.png",
targetPath + "/" + code + ".png", 340, 160);
// code
Utils.pressText(code, targetPath + "/" + code + ".png", targetPath
+ "/" + code + ".png", 390, 417, 0.5f);
}
//
}
}
효과:일괄 생 성 된 그림 효과 그림 은 다음 과 같 습 니 다.
대량 그림:
utils 코드:
package cn.utils.code;
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.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Hashtable;
import javax.imageio.ImageIO;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
/** . */
public abstract class Utils {
/** :yyyy-MM-dd HH:mm:ss */
public static String DF_DATETIME = "yyyyMMdd";
private static float alpha = 1f;
/**
*
* @Title: toBufferedImage
* @Description:
* @param text
*
* @param width
*
* @param height
*
* @param
* @param Exception
*
* @return BufferedImage
* @throws
*/
public static BufferedImage toBufferedImage(String text, int width,
int height) throws Exception {
int BLACK = 0xFF000000;
int WHITE = 0xFFFFFFFF;
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); //
hints.put(EncodeHintType.MARGIN, 1);
BitMatrix matrix = new MultiFormatWriter().encode(text,
BarcodeFormat.QR_CODE, width, height, hints);
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;
}
/**
*
* @Title: markImageByCode
* @Description:
* @param img
* image
* @param srcImgPath
*
* @param targerPath
*
* @param positionWidth
*
* @param positionHeight
*
* @return void
* @throws
*/
public static void markImageByCode(Image img, String srcImgPath,
String targerPath, int positionWidth, int positionHeight) {
OutputStream os = null;
try {
Image srcImg = ImageIO.read(new File(srcImgPath));
BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
// 1、
Graphics2D g = buffImg.createGraphics();
// 2、
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 3、
g.drawImage(img, positionWidth, positionHeight, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
// 4、
g.dispose();
// 5、 ( PNG ,jpg )
os = new FileOutputStream(targerPath);
ImageIO.write(buffImg, "PNG", os);
System.out.println(" ");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != os)
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
*
* @Title: pressText
* @Description:
* @param pressText
*
* @param srcImageFile
*
* @param destImageFile
*
* @param x
*
* @param y
*
* @param alpha
*
* @return void
* @throws
*/
public final static void pressText(String pressText, String srcImageFile,
String destImageFile, int x, int y, float alpha) {
try {
File img = new File(srcImageFile);
Image src = ImageIO.read(img);
int width = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
//
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.drawImage(src, 0, 0, width, height, null);
//
g.setColor(new Color(89, 87, 87));
// Font
g.setFont(new Font(" _GBK", Font.BOLD, 14));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// -> , -> (x,y) .
g.drawString(pressText, x, y);
g.dispose();
ImageIO.write((BufferedImage) image, "PNG", new File(destImageFile));//
} catch (Exception e) {
e.printStackTrace();
}
}
//
/** String, yyyy-MM-dd HH:mm:ss, . */
public static String toStr() {
return toStr(DF_DATETIME);
}
/** String, format , ,format . */
public static String toStr(String format) {
return toStr(format, new Date());
}
/** String, yyyy-MM-dd HH:mm:ss, date . */
public static String toStr(Date date) {
return toStr(DF_DATETIME, date);
}
/** String, format , date ,format . */
public static String toStr(String format, Date date) {
return new SimpleDateFormat(format).format(date);
}
public static String formateNumber(int num) {
DecimalFormat df = new DecimalFormat("000000");
String str2 = df.format(num);
return str2;
}
public static boolean makeDirs(String filePath) {
File folder = new File(filePath);
return (folder.exists() && folder.isDirectory()) ? true : folder
.mkdirs();
}
}
사용 한 기술:1.사용 하 는 zxing QR 코드 생 성 도구.
1)다운로드 주소:http://repo1.maven.org/maven2/com/google/zxing/javase/3.1.0/
2).maven 설정
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>2.2</version>
</dependency>
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.