首先先处理图像
将图片按自己的要求进行缩放,以便于加载到二维码的中心
*/
private static BufferedImage scale(String srcImageFile, int height,
int width) throws IOException {
File file = new File(srcImageFile);
BufferedImage srcImage = ImageIO.read(file);
Image destImage = srcImage.getScaledInstance(width, height,
BufferedImage.SCALE_SMOOTH);
Image smallImg =destImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
BufferedImage newImage = new BufferedImage(height, width, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = newImage.createGraphics();
g.drawImage(smallImg, 0, 0, null);
g.dispose();
ImageIO.write(newImage,
"jpg", new File("E:/谷歌下载/354.jpg"));
return newImage;
}
srcImageFile:需要处理图片的地址
height:想要得到图片的高度
width:想要得到图片的宽度
开始生成二维码
private static BufferedImage genBarcode(String content, int width,
int height, String fImage) throws WriterException,
IOException {
// 读取源图像
BufferedImage scaleImage = scale(fImage, IMAGE_WIDTH,
IMAGE_HEIGHT);
int[][] srcPixels = new int[IMAGE_WIDTH][IMAGE_HEIGHT];
for (int i = 0; i < scaleImage.getWidth(); i++) {
for (int j = 0; j < scaleImage.getHeight(); j++) {
srcPixels[i][j] = scaleImage.getRGB(i, j);
}
}
java.util.Hashtable hint = new java.util.Hashtable();
hint.put(EncodeHintType.CHARACTER_SET, "utf-8");
hint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
// 生成二维码
BitMatrix matrix = mutiWriter.encode(content, BarcodeFormat.QR_CODE,
width, height, hint);
// 二维矩阵转为一维像素数组
int halfW = matrix.getWidth() / 2;
int halfH = matrix.getHeight() / 2;
int[] pixels = new int[width * height];
for (int y = 0; y < matrix.getHeight(); y++) {
for (int x = 0; x < matrix.getWidth(); x++) {
// 读取图片
if (x > halfW - IMAGE_HALF_WIDTH
&& x < halfW + IMAGE_HALF_WIDTH
&& y > halfH - IMAGE_HALF_WIDTH
&& y < halfH + IMAGE_HALF_WIDTH) {
pixels[y * width + x] = srcPixels[x - halfW
+ IMAGE_HALF_WIDTH][y - halfH + IMAGE_HALF_WIDTH];
}
// 在图片四周形成边框
else if ((x > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH
&& x < halfW - IMAGE_HALF_WIDTH + FRAME_WIDTH
&& y > halfH - IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH
+ IMAGE_HALF_WIDTH + FRAME_WIDTH)
|| (x > halfW + IMAGE_HALF_WIDTH - FRAME_WIDTH
&& x < halfW + IMAGE_HALF_WIDTH + FRAME_WIDTH
&& y > halfH - IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH
+ IMAGE_HALF_WIDTH + FRAME_WIDTH)
|| (x > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH
&& x < halfW + IMAGE_HALF_WIDTH + FRAME_WIDTH
&& y > halfH - IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH
- IMAGE_HALF_WIDTH + FRAME_WIDTH)
|| (x > halfW - IMAGE_HALF_WIDTH - FRAME_WIDTH
&& x < halfW + IMAGE_HALF_WIDTH + FRAME_WIDTH
&& y > halfH + IMAGE_HALF_WIDTH - FRAME_WIDTH && y < halfH
+ IMAGE_HALF_WIDTH + FRAME_WIDTH)) {
pixels[y * width + x] = 0xfffffff;
} else {
// 此处可以修改二维码的颜色,可以分别制定二维码和背景的颜色;
pixels[y * width + x] = matrix.get(x, y) ? 0x8a2be2//ff000000,黑色
: 0xfffffff;
}
}
}
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
image.getRaster().setDataElements(0, 0, width, height, pixels);
return image;
}
定义生成的图片格式,存放路径
public static void encode(String content, int width, int height,
String fImage, String sImage) {
try {
// ImageIO.write 参数 1、BufferedImage 2、输出的格式 3、输出的文件
ImageIO.write(genBarcode(content, width, height, fImage),
"jpg", new File(sImage));
} catch (IOException e) {
e.printStackTrace();
} catch (WriterException e) {
e.printStackTrace();
}
}
测试
public static void main(String[] args) {
Logo_Two_Code l = new Logo_Two_Code();
File fileToUpload = new File("C:/Users/cjyun/Desktop/sql分析.doc");
try {
InputStream in = new FileInputStream(fileToUpload);
l.encode(
" 哥下辈子我要做个女人,找个像我这样的男人我岂"
+ "是一个帅字形容了得。我乃:英俊潇洒、风流倜傥、玉树临风、年少多金、神勇威武、天下无敌、宇内第一、寂寞高手、刀枪不入、唯我独尊、玉面郎君、仁者无敌、勇者无惧、金刚不坏、英明神武、侠义非凡、义薄云天、古往今来、无与伦比、谦虚好学、不耻下问、聪明伶俐、活泼可爱、待友热情、对敌冷酷、头脑精明、仙福永享、有胆有色、举世无双、既酷又帅、单身贵族、至尊至圣、至高无上、华丽绚烂、英勇无比、道德榜样、千杯不醉、坐怀不乱、知识渊博、才高八斗、傲视众生、世外高人、光明磊落、公正无私、震古烁今,第一大英雄大豪杰大侠客大宗师,急如风、静如林、掠如火、不动如山,号称一朵梨花压海棠,人送 绰号上天下地无所不能玉面小飞龙,英俊与智慧的化身,侠义与仁义的糅合,前辈高人巨侠是也。QQ:811861193",
800, 800, "E:/谷歌下载/12.jpg", "E:/谷歌下载/234.jpg");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
结果
总结
还是图片大的话好看,还清楚