最近做的項目中用到圖片加密技術,需要用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();
}