This commit is contained in:
xiangwbs
2018-03-11 10:45:20 +08:00
parent 3ec7598f20
commit e16c2d0760
2 changed files with 66 additions and 52 deletions
@@ -12,8 +12,6 @@ import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
@@ -24,7 +22,7 @@ import java.util.List;
*/
@Service
public class QRCodeZipService {
private final Logger logger = LoggerFactory.getLogger(QRCodeZipService.class);
private final static Logger logger = LoggerFactory.getLogger(QRCodeZipService.class);
/**
* 生成默认长度的二维码
@@ -33,7 +31,7 @@ public class QRCodeZipService {
* @param text 二维码内容
* @return
*/
public RestMessage createQRCode(String name, String text) {
public static RestMessage createQRCode(String name, String text) {
RestMessage result = new RestMessage();
String path = getPath();
File output = new File(path + File.separator + name + ".png");
@@ -68,19 +66,19 @@ public class QRCodeZipService {
*
* @return
*/
public RestMessage batchGetImage(HttpServletResponse response, String[] names, String fileName) {
List<File> files = new ArrayList<>();
if (names.length == 0) {
throw new BusinessException("请选择要导出的图片");
}
Arrays.stream(names).forEach(name -> {
File file = getFile(name);
if (file != null && file.length() > 0) {
files.add(file);
}
});
return zipFile(response, files, fileName);
}
// public RestMessage batchGetImage(HttpServletResponse response, String[] names, String fileName) {
// List<File> files = new ArrayList<>();
// if (names.length == 0) {
// throw new BusinessException("请选择要导出的图片");
// }
// Arrays.stream(names).forEach(name -> {
// File file = getFile(name);
// if (file != null && file.length() > 0) {
// files.add(file);
// }
// });
// return zipFile(response, files, fileName);
// }
/**
* 根据文件名获取图片
@@ -102,7 +100,7 @@ public class QRCodeZipService {
*
* @return
*/
public String getPath() {
public static String getPath() {
ClassPathResource pic = new ClassPathResource("file");
String absolutePath;
try {
@@ -126,4 +124,8 @@ public class QRCodeZipService {
restMessage.setMessage("导出zip文件成功");
return restMessage;
}
public static void main(String[] args) {
createQRCode("aa","aa");
}
}
@@ -14,10 +14,7 @@ import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.*;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
@@ -64,33 +61,35 @@ public class QRCodeUtils {
/**
* 生成默认尺寸带logo的二维码
*
* @param url 二维码
* @param logoImg
* @param text
* @param output 图片文件
* @param text 二维码内容
* @param logoImg logo图片
* @param title 二维码图片描述
*/
public static void createCodeLogo(String url, InputStream logoImg, String text) {
createCodeLogo(url, 200, 200, logoImg, text, 14);
public static void createCodeLogo(File output,String text, InputStream logoImg, String title) {
createCodeLogo(output,text, logoImg, title, 200, 200,14);
}
/**
* 生成自定义尺寸带logo的二维码
*
* @param text
* @param width
* @param height
* @param logoImg
* @param output 图片文件
* @param title 二维码图片描述
* @param width 宽
* @param height 高
* @param logoImg logo图片
* @param text 二维码内容
* @param size 字体大小
*/
public static InputStream createCodeLogo(String url, int width, int height, InputStream logoImg, String text, int size) {
public static void createCodeLogo(File output,String text,InputStream logoImg, String title, int width, int height,int size) {
try {
internal._codeHeight = height;
internal._codeWidth = width;
internal._logoImg = logoImg;
internal._text = text;
internal._text = title;
internal._fontSize = size;
BitMatrix bitMatrix = internal.createCode(url);
return internal.addMaterial(bitMatrix);
//internal.output(output, bitMatrix);
internal._output=output;
BitMatrix bitMatrix = internal.createCode(text);
internal.addMaterial(bitMatrix);
} catch (WriterException e) {
LOGGER.error(e.getMessage());
throw new UtilException("生成自定义尺寸带logo的二维码失败");
@@ -101,9 +100,8 @@ public class QRCodeUtils {
/**
* 解析二维码图片
*
* @param file
* @param file 二维码文件
* @return
* @throws Exception
*/
public static String decode(File file) {
try {
@@ -124,6 +122,9 @@ public class QRCodeUtils {
}
}
/**
* 二维码信息
*/
private static class Internal {
// 二维码大小
private int _codeWidth;
@@ -148,12 +149,17 @@ public class QRCodeUtils {
//图像类型
private final String _format = "png";
private BitMatrix createCode(String url) throws WriterException {
/**
* 根据内容生成二维码矩阵
* @param text
* @return
* @throws WriterException
*/
private BitMatrix createCode(String text) throws WriterException {
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
BitMatrix encode = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, _codeWidth, _codeHeight, hints);// 生成矩阵
return encode;
return new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, _codeWidth, _codeHeight, hints);// 生成矩阵
}
/***
@@ -182,7 +188,7 @@ public class QRCodeUtils {
*
* @param bitMatrix
*/
private InputStream addMaterial(BitMatrix bitMatrix) {
private void addMaterial(BitMatrix bitMatrix) {
try {
BufferedImage image = toBufferedImage(bitMatrix);
//计算高宽
@@ -192,15 +198,17 @@ public class QRCodeUtils {
//定位文字
image = position_text(image);
//生成二维码
//output(image);
//转InputStream
return bufferImage_to_InputStream(image);
output(image);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* 定位文字
* @param image
* @return
*/
private BufferedImage position_text(BufferedImage image) {
Graphics2D gh = image.createGraphics();
gh.setColor(Color.black);
@@ -217,6 +225,9 @@ public class QRCodeUtils {
/**
* 定位logo
* @param image
* @return
* @throws IOException
*/
private BufferedImage position_logo(BufferedImage image) throws IOException {
Graphics2D gs = image.createGraphics();
@@ -280,13 +291,14 @@ public class QRCodeUtils {
}
}
public static void main(String[] args) {
public static void main(String[] args) throws Exception{
// String tomcatHome = System.getProperty("catalina.home");
// String name="QRcode";
// File output=new File(tomcatHome+File.separator+"file"+File.separator+name+".png");
File output = new File("C:/Users/10232/Desktop/xwbing.png");
createCode("xwbing", 500, 500, output);//text即QRcode
String decode = decode(output);
File image = new File("C:/Users/ThinkPad/Desktop/xwbing.png");
FileInputStream logo=new FileInputStream(image);
File out = new File("C:/Users/ThinkPad/Desktop/bbb.png");
createCodeLogo(out,"aaaa",logo,"");
}
}