private BufferedImage getNewImage(MultipartFile oldImage, double width, double height) throws IOException{
/*srcURl 原图地址;deskURL 缩略图地址;comBase 压缩基数;scale 压缩限制(宽/高)比例*/
ByteArrayInputStream bais = new ByteArrayInputStream(oldImage.getBytes());
MemoryCacheImageInputStream mciis = new MemoryCacheImageInputStream(bais);
Image src = ImageIO.read(mciis);
double srcHeight = src.getHeight(null);
double srcWidth = src.getWidth(null);
double deskHeight = 0;//缩略图高
double deskWidth = 0;//缩略图宽
if (srcWidth>srcHeight) {
if (srcWidth>width) {
if (width/height>srcWidth/srcHeight) {
deskHeight = height;
deskWidth = srcWidth/(srcHeight/height);
}
else {
deskHeight = width/(srcWidth/srcHeight);
deskWidth = width;
}
}
else {
if (srcHeight>height) {
deskHeight = height;
deskWidth = srcWidth/(srcHeight/height);
}else {
deskHeight=srcHeight;
deskWidth=srcWidth;
}
}
}
else if(srcHeight>srcWidth)
{
if (srcHeight>(height)) {
if ((height)/width>srcHeight/srcWidth) {
deskHeight = srcHeight/(srcWidth/width);
deskWidth = width;
}else {
deskHeight = height;
deskWidth = (height)/(srcHeight/srcWidth);
}
}
else {
if (srcWidth>width) {
deskHeight = srcHeight/(srcWidth/width);
deskWidth = width;
}else {
deskHeight=srcHeight;
deskWidth=srcWidth;
}
}
}
else if (srcWidth==srcHeight) {
if (width>=(height)&&srcHeight>(height)) {
deskWidth=(height);
deskHeight=(height);
}
else if (width<=(height)&&srcWidth>width) {
deskWidth=width;
deskHeight=width;
}
else if (width==(height)&&srcWidth<width) {
deskWidth=srcWidth;
deskHeight=srcHeight;
}
else {
deskHeight=srcHeight;
deskWidth=srcWidth;
}
}
BufferedImage tag = new BufferedImage((int)deskWidth,(int)deskHeight,
BufferedImage.TYPE_3BYTE_BGR);
tag.getGraphics().drawImage(src, 0, 0, (int)deskWidth, (int)deskHeight, null); //绘制缩小后的图
return tag;
}
上传的MultipartFile
@RequestParam("picFile") MultipartFile file
String originalName = file.getOriginalFilename();
originalName = originalName.toLowerCase();
resp.setType(FilenameUtils.getExtension(originalName));
String id = DateUtils.format(new Date(),"yyyyMMddHHmmssSSS");
resp.setFileName(id + "." + resp.getType());
File path = FileUtils.getFile(imageRootDir);
FileUtils.forceMkdir(path);
File ordinalFile = FileUtils.getFile(path,resp.getFileName());
ImageIO.write(newImage, resp.getType(), ordinalFile);