/**
* 图片缩放
*
* @param filePath 图片路径
* @param height 高度
* @param width 宽度
* @param bb 比例不对时是否需要补白
*/
public static BufferedImage resize(String filePath, int height, int width, boolean bb) {
try {
double ratio = 0;
File localFile = readFile(filePath);
BufferedImage bi = ImageIO.read(localFile);
Image itemp = bi.getScaledInstance(width, height, Image.SCALE_SMOOTH);
if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
if (bi.getHeight() > bi.getWidth()) {
ratio = (new Integer(height)).doubleValue() / bi.getHeight();
} else {
ratio = (new Integer(width)).doubleValue() / bi.getWidth();
}
AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
itemp = op.filter(bi, null);
}
if (bb) {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
if (width == itemp.getWidth(null))
g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null),
itemp.getHeight(null), Color.white, null);
else
g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null),
itemp.getHeight(null), Color.white, null);
g.dispose();
itemp = image;
}
return (BufferedImage) itemp;
} catch (Exception e) {
Log("缩放图片失败," + ", 弃用 url:" + filePath);
}
return null;
}
/**
* 从图片url到File对象
*/
private static File readFile(String fileUrl) throws Exception {
if (StringUtils.isEmpty(fileUrl)) {
return null;
}
String filePath;
String pathName ;
File dir = new File(LOCAL_PICTURE_DIR + pathName);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(LOCAL_PICTURE_DIR + filePath);
if (file.exists()) {
return file;
}
URL fileURL = new URL(fileUrl);
InputStream inputStream = fileURL.openStream();
FileOutputStream outputStream = new FileOutputStream(file);
byte[] array = new byte[1024];
int length = inputStream.read(array);
while (length >= 0) {
outputStream.write(array, 0, length);
length = inputStream.read(array);
}
inputStream.close();
outputStream.close();
return file;
}
/**
* 图片绘制
*
* @param imageResult 结果图像
* @param image 源图像
* @param xLoc 结果图像的x坐标
* @param yLoc 结果图像的y坐标
* @param height 取自源图像高度
* @param width 取自源图像宽度
*/
private static void merge(BufferedImage imageResult, BufferedImage image, int xLoc, int yLoc, int width,
int height) throws IOException {
if (image == null) {
return;
}
if (xLoc >= X_LENGTH || yLoc >= Y_LENGTH) {
return;
}
if (xLoc + width >= X_LENGTH) {
width = X_LENGTH - xLoc;
}
if (yLoc + height >= Y_LENGTH) {
height = Y_LENGTH - yLoc;
}
int[] imageArray = new int[width * height];
imageArray = image.getRGB(0, 0, width, height, imageArray, 0, width);
try {
imageResult.setRGB(xLoc, yLoc, width, height, imageArray, 0, width);
} catch (Exception e) {
throw e;
}
}