package com.cmcc.util;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
public class ImgHelper {
/**
* 剧中裁剪任意比例,理论支持所有图片格式
* @param file
* @param a 比例宽度
* @param b 比例高度
* @return
* @throws IOException
*/
public static InputStream cutCenterImage(File file,int a ,int b) throws IOException{
ImageInputStream iis = ImageIO.createImageInputStream(file);
Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
ImageReader reader =iter.next();
String ext=(reader.getFormatName());
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
int imageIndex = 0;
int x=reader.getWidth(imageIndex);
int y=reader.getHeight(imageIndex);
int w,h;
if((x/y)>=(a/b)){
if(a/b>1){
w=x;
h=x*b/a;
}else{
w=y*a/b;
h=y;
}
}else{
if(a/b<1){
w=y*a/b;
h=y;
}else{
w=x;
h=x*b/a;
}
}
Rectangle rect = new Rectangle((x-w)/2, (y-h)/2, w, h);
param.setSourceRegion(rect);
BufferedImage bi = reader.read(0,param);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(bi, ext, os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
iis.close();
return is;
}
}
按一定比例裁剪图片
最新推荐文章于 2022-01-10 10:51:27 发布