bug
This commit is contained in:
@@ -6,7 +6,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import sc545.pay.utils.DBUtil;
|
||||
import sc545.pay.utils.ImgUtils;
|
||||
import sc545.pay.utils.FileUtils;
|
||||
import sc545.pay.utils.ReadTxt;
|
||||
import sc545.pay.utils.Utils;
|
||||
|
||||
@@ -69,7 +69,7 @@ public class core {
|
||||
if(i==1){
|
||||
rs.put("code", "1");
|
||||
rs.put("qrcode", response.getQrCode());
|
||||
rs.put("qrimg", ImgUtils.QrImgB64(response.getQrCode(), 300));
|
||||
rs.put("qrimg", FileUtils.QrImgB64(response.getQrCode(), 300));
|
||||
rs.put("out_trade_no", response.getOutTradeNo());
|
||||
}else rs.put("errcode", "-1");
|
||||
} else {
|
||||
|
||||
@@ -1,244 +0,0 @@
|
||||
package sc545.pay.utils;
|
||||
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.*;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import net.coobird.thumbnailator.Thumbnails;
|
||||
import net.coobird.thumbnailator.geometry.Positions;
|
||||
import sun.misc.BASE64Encoder;
|
||||
|
||||
import com.google.zxing.*;
|
||||
import com.google.zxing.common.BitMatrix;
|
||||
|
||||
public class ImgUtils {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private static final int BLACK = 0xFF000000;
|
||||
private static final int WHITE = 0xFFFFFFFF;
|
||||
private static BufferedImage toBufferedImage(BitMatrix matrix) {
|
||||
int width = matrix.getWidth();
|
||||
int height = matrix.getHeight();
|
||||
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;
|
||||
}
|
||||
|
||||
private static void writeToFile(BitMatrix matrix, String format, File file) throws IOException {
|
||||
BufferedImage image = toBufferedImage(matrix);
|
||||
if (!ImageIO.write(image, format, file)) {
|
||||
throw new IOException("Could not write an image of format " + format + " to " + file);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除二维码白边
|
||||
* @param matrix
|
||||
* @return
|
||||
*/
|
||||
public static BitMatrix deleteWhite(BitMatrix matrix) {
|
||||
int[] rec = matrix.getEnclosingRectangle();
|
||||
int resWidth = rec[2] + 1;
|
||||
int resHeight = rec[3] + 1;
|
||||
|
||||
BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
|
||||
resMatrix.clear();
|
||||
for (int i = 0; i < resWidth; i++) {
|
||||
for (int j = 0; j < resHeight; j++) {
|
||||
if (matrix.get(i + rec[0], j + rec[1]))
|
||||
resMatrix.set(i, j);
|
||||
}
|
||||
}
|
||||
return resMatrix;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 生成一张二维码图片文件
|
||||
* @param content 二维码内容
|
||||
* @param widthHeight 宽高度
|
||||
* @param path 图片存储路径(不带文件名)
|
||||
* @return
|
||||
*/
|
||||
public static String QrImgFile(String content,int widthHeight,String path) {
|
||||
try {
|
||||
String codeName = UUID.randomUUID().toString();// 二维码的图片名
|
||||
String imageType = "jpg";// 图片类型
|
||||
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
|
||||
Map<EncodeHintType, String> hints = new HashMap<EncodeHintType, String>();
|
||||
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
|
||||
BitMatrix bitMatrix= multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, widthHeight, widthHeight, hints);
|
||||
bitMatrix= deleteWhite(bitMatrix);
|
||||
// BufferedImage imgbuf = toBufferedImage(bitMatrix);
|
||||
File file1 = new File(path, codeName + "." + imageType);
|
||||
writeToFile(bitMatrix, imageType, file1);
|
||||
return path+codeName + "." + imageType;
|
||||
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 生成一张二维码图片(BufferedImage)
|
||||
* @param content 二维码内容
|
||||
* @param widthHeight 宽高度
|
||||
* @return
|
||||
*/
|
||||
public static BufferedImage QrImgBuf(String content,int widthHeight) {
|
||||
try {
|
||||
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
|
||||
Map<EncodeHintType, String> hints = new HashMap<EncodeHintType, String>();
|
||||
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
|
||||
BitMatrix bitMatrix= multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, widthHeight, widthHeight, hints);
|
||||
bitMatrix= deleteWhite(bitMatrix);
|
||||
BufferedImage imgbuf = toBufferedImage(bitMatrix);
|
||||
return imgbuf;
|
||||
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 生成一张二维码图片(base64)<br>
|
||||
* data:image/jpg;base64,base64_code
|
||||
* @param content 二维码内容
|
||||
* @param widthHeight 宽高度
|
||||
* @return
|
||||
*/
|
||||
public static String QrImgB64(String content,int widthHeight) {
|
||||
try {
|
||||
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
|
||||
Map<EncodeHintType, String> hints = new HashMap<EncodeHintType, String>();
|
||||
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
|
||||
BitMatrix bitMatrix= multiFormatWriter.encode(content, BarcodeFormat.QR_CODE, widthHeight, widthHeight, hints);
|
||||
bitMatrix= deleteWhite(bitMatrix);
|
||||
BufferedImage imgbuf = toBufferedImage(bitMatrix);
|
||||
ByteArrayOutputStream os = new ByteArrayOutputStream();//新建流。
|
||||
ImageIO.write(imgbuf, "jpg", os);//利用ImageIO类提供的write方法,将bi以png图片的数据模式写入流。
|
||||
byte b[] = os.toByteArray();//从流中获取数据数组。
|
||||
String str = new BASE64Encoder().encode(b);
|
||||
return str;
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 图片质量压缩
|
||||
* @param img 文件流
|
||||
* @param quality 压缩质量 0~1/1为最高质量
|
||||
* @return
|
||||
*/
|
||||
public static BufferedImage rarImgBuf(InputStream img, double quality) {
|
||||
BufferedImage buf =null;
|
||||
try {
|
||||
buf = Thumbnails.of(img).scale(1f).outputQuality(quality).asBufferedImage();
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* 图片质量压缩
|
||||
* @param img 文件地址
|
||||
* @param quality 压缩质量 0~1/1为最高质量
|
||||
* @return
|
||||
*/
|
||||
public static File rarImgFile(File img, double quality) {
|
||||
File arg0 = img;
|
||||
try {
|
||||
Thumbnails.of(img).scale(1f).outputQuality(quality).toFile(arg0);
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return arg0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 裁剪图片<br>
|
||||
* 从左上角开始裁切<br>
|
||||
* 另存图片保持等比缩放,若填写的高度不符合自动调整为等比例
|
||||
*
|
||||
* @param img 图片文件
|
||||
* @param p 裁切位置 Positions.TOP/BOTTOM_LEFT/RIGHT、CENTER
|
||||
* @param x 裁切x轴范围
|
||||
* @param y 裁切y轴范围
|
||||
* @param width 另存图片的宽度
|
||||
* @param height 另存图片的高度
|
||||
* @return
|
||||
*/
|
||||
public static File cutImgFile(File img,Positions p,int x,int y,int width,int height) {
|
||||
File arg0 = img;
|
||||
try {
|
||||
Thumbnails.of(img).sourceRegion(p, x, y).size(width, height).keepAspectRatio(true).toFile(arg0);
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return arg0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 裁剪图片<br>
|
||||
* 从左上角开始裁切<br>
|
||||
* 另存图片保持等比缩放,若填写的高度不符合自动调整为等比例
|
||||
*
|
||||
* @param img 图片流
|
||||
* @param p 裁切位置 Positions.TOP/BOTTOM_LEFT/RIGHT、CENTER
|
||||
* @param x 裁切x轴范围
|
||||
* @param y 裁切y轴范围
|
||||
* @param width 另存图片的宽度
|
||||
* @param height 另存图片的高度
|
||||
* @return
|
||||
*/
|
||||
public static BufferedImage cutImgBuf(InputStream img,Positions p,int x,int y,int width,int height) {
|
||||
BufferedImage buf =null;
|
||||
try {
|
||||
buf=Thumbnails.of(img).sourceRegion(p, x, y).size(width, height).keepAspectRatio(true).asBufferedImage();
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user