最近做的项目中用到图片加密技术,需要用ImageIO.read()读取图片获取其RGB分量,但是其可以读取的图片大小有限制,正常手机拍的图片其读取不出来,所以我们就使用到了图片压缩技术,主要有两种压缩方法:1,可以按原图片的大小按比例压缩;2,按需要的宽和高压缩成固定大小的图片,两种方式实现的方法相同,我采用了第二种 ,核心代码如下:
public static void imageScale(File file,int width,int height,File file2) throws IOException
{
{
//读取图片,并获得图片的宽和高
BufferedImage src_image=ImageIO.read(file);
int image_width=src_image.getWidth();
int image_height=src_image.getHeight();
// 这种是按比例压缩,得到新的长宽高。
// int image_width2=(int) (image_width*0.5);
// int image_height2=(int) (image_height*0.5);
//声明一个图片容器,利用dramImage方法绘制新的图片
BufferedImage buf_image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
buf_image.getGraphics().drawImage(src_image, 0, 0, width, height, null);
//io流输出图片
FileOutputStream fos=new FileOutputStream(file2);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode(buf_image);
fos.close();
BufferedImage src_image=ImageIO.read(file);
int image_width=src_image.getWidth();
int image_height=src_image.getHeight();
// 这种是按比例压缩,得到新的长宽高。
// int image_width2=(int) (image_width*0.5);
// int image_height2=(int) (image_height*0.5);
//声明一个图片容器,利用dramImage方法绘制新的图片
BufferedImage buf_image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
buf_image.getGraphics().drawImage(src_image, 0, 0, width, height, null);
//io流输出图片
FileOutputStream fos=new FileOutputStream(file2);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode(buf_image);
fos.close();
}