java上传图片放大(小图等比放大,大图等比裁剪):
package oms.util;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 上传图片-小图片放大图片不变型,但会模糊(取决于图片本身的像素)
*
* @author sunlight
*
*/
public class AmplificationImage {
/**
* 判断图片是否大于目标尺寸
*
* @param srcPath
* @param maxWidth
* @param maxHeight
* @return
*/
public static boolean isBigImage(String srcPath, int maxWidth, int maxHeight) {
BufferedImage bufferedImage = null;
try {
File of = new File(srcPath);
if (of.canRead()) {
bufferedImage = ImageIO.read(of);
}
} catch (Exception e) {
return false;
}
if (bufferedImage != null) {
int width = bufferedImage.getWidth();
int height = bufferedImage.getHeight();
if (width > maxWidth && height > maxHeight) {
return true;
}
}
return false;
}
/**
* 图片放大的方法(不会变色)
* @param inputUrl 图片输入路劲
* @param outputUrl 图片输出路劲
* @param maxWidth 目标宽
* @param maxHeight 目标高
* @param proportion 是否等比缩放
* @return
*/
public static boolean zoomPicture(String inputUrl, String outputUrl,
int maxWidth, int maxHeight, boolean proportion) {
try {
// 获得源文件
File file = new File(inputUrl);
if (!file.exists()) {
return false;
}
Image img = ImageIO.read(file);
// 判断图片格式是否正确
if (img.getWidth(null) == -1) {
return false;
} else {
int newWidth;
int newHeight;
// 判断是否是等比缩放
if (proportion == true) {
// 为等比缩放计算输出的图片宽度及高度
double rate1 = ((double) img.getWidth(null))
/ (double) maxWidth;
double rate2 = ((double) img.getHeight(null))
/ (double) maxHeight;
// 根据缩放比率大的进行缩放控制
double rate = rate1 > rate2 ? rate2 : rate1;
newWidth = (int) (((double) img.getWidth(null)) / rate);
newHeight = (int) (((double) img.getHeight(null)) / rate);
} else {
newWidth = maxWidth; // 输出的图片宽度
newHeight = maxHeight; // 输出的图片高度
}
BufferedImage tag = new BufferedImage((int) newWidth,
(int) newHeight, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(
img.getScaledInstance(newWidth, newHeight,
Image.SCALE_SMOOTH), 0, 0, null);
FileOutputStream out = new FileOutputStream(outputUrl);
// JPEGImageEncoder可适用于其他图片类型的转换
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
/**
* 对图片进行放大(部分图片会变红)
* @param srcPath
* 原始图片路径(绝对路径)
* @param newPath
* 放大后图片路径(绝对路径)
* @param times
* 放大倍数
* @return 是否放大成功
*/
public static boolean zoomInImage(String srcPath, String newPath,
int maxWidth, int maxHeight) {
BufferedImage bufferedImage = null;
try {
File of = new File(srcPath);
if (of.canRead()) {
bufferedImage = ImageIO.read(of);
}
} catch (IOException e) {
// TODO: 打印日志
return false;
}
if (bufferedImage != null) {
bufferedImage = zoomInImage(bufferedImage, maxWidth, maxHeight);
try {
// TODO: 这个保存路径需要配置下子好一点
ImageIO.write(bufferedImage, "JPG", new File(newPath)); // 保存修改后的图像,全部保存为JPG格式
} catch (IOException e) {
// TODO 打印错误信息
return false;
}
}
return true;
}
/**
* 对图片进行放大
*
* @param originalImage
* 原始图片
* @param maxWidth
* 目标宽度
* @param maxHeight
* 目标高度
* @return
*/
private static BufferedImage zoomInImage(BufferedImage originalImage,
int maxWidth, int maxHeight) {
int times = 1; // 放大倍数
int width = originalImage.getWidth();
int height = originalImage.getHeight();
double sw = (maxWidth * 1.0) / (width * 1.0);
double sh = (maxHeight * 1.0) / (height * 1.0);
if (width > maxWidth && height > maxHeight) {
return originalImage;
} else if (width < maxWidth && height < maxHeight) {
if (sw > sh) {
times = (int) (sw + 0.8);
} else {
times = (int) (sh + 0.8);
}
} else if (width < maxWidth && height > maxHeight) {
times = (int) (sw + 0.8);
} else {
times = (int) (sh + 0.8);
}
int lastW = times * width;
int lastH = times * height;
BufferedImage newImage = new BufferedImage(lastW, lastH, originalImage
.getType());
Graphics g = newImage.getGraphics();
g.drawImage(originalImage, 0, 0, lastW, lastH, null);
g.dispose();
return newImage;
}
}