Android JAVA 裁剪、压缩图片

**************************************************************************************************************************************

    前一段时间项目进入维护阶段之后,工作也不是很忙,不过没清闲几天,Boss就找我有任务了,让把项目中图片文件夹中的图片循环遍历,并判断,如果图片不是方形的,先裁剪成方形的;然后,判断图片大于300kb的话,压缩到300kb。

    想了一下,也不需要界面,直接创建Java工程,在main里面实现就可以了。

    直接贴代码了:

    a.遍历图片文件夹:

    

static void showAllFiles(String path) {  
File root = null;  
try {  
    root = new File(path);  
    if (root.exists()) {  //D:/test/temp  
        File[] files = root.listFiles();  //三个文件夹  
        if (files.length == 0) {  
            System.out.println("文件夹是空的!");  
            return;  
        } else {  
            //遍历图片文件夹  
            for (File file : files) {  
                if (file.isDirectory()) {  
                    //文件夹里面含有子文件夹  
                    showAllFiles(file.getAbsolutePath());  
                    // 得到该指定目录下的所有文件  
                } else {  
                    //文件夹里面不含有子文件夹  
                    /* 
                     * System.out.println("显示"+filePath+"下所有子目录"+file. 
                     * getAbsolutePath()); 
                     */  
                    String filePath = ""; // 文件夹下单个文件的路径  
                    String filePicName = ""; // 文件名称  
                    String pictureFormat = "";// 图片的格式  
  
                    getImgInfo(file.getPath());     
                      
                }  
            }  
        }  
    } else {  
        System.out.println("文件不存在!");  
    }  
} catch (Exception e) {  
    System.out.println(e.toString()); // 空指针  
}  

    

   b.判断图片形状  

    判断图片形状的依据就是图片的话宽和高,所以只要获取到图片的width和height,那就很容易判断了。而java又为我们提供了一个使用很方便的图片类BufferedImage ,通过ImageIO.read(File)就可以获取。

    

public static void getImgInfo(String imgpath) {   
    String fileName = null;   //图片文件名称  
    String format = null ;   //图片转换格式  
    String tempFilePath = "" ;  //临时文件路径  
    String destFilePath = "" ;  //目标文件夹的路径  
    File tempFile = null ;  
    String temp[] = imgpath.replaceAll("\\\\", "/").split("/");  
    //获取图片名称  
    if (temp.length > 1) {  
    fileName = temp[temp.length-1];  
}  
    format = fileName.substring(fileName.lastIndexOf(".")).replace(".", "");  
    if ("jpg".equals(format)||"JPG".equals(format)) {  
        format = "JPG";  
} else if ("png".equals(format)||"PNG".equals(format)){  
    format = "PNG";  
}else if ("bmp".equals(format)||"BMP".equals(format)){  
    format = "BMP";  
}  
    for (int i = 0; i < temp.length; i++) {  
        if (i >1&&i
    
     bufferedImage.getHeight()&&fis.available()/1024-300>0) {  
                size = bufferedImage.getHeight() ;  
            } else if(bufferedImage.getWidth()>bufferedImage.getHeight()&&fis.available()/1024-300<0){  
                size = bufferedImage.getHeight() ;  
            }else if(bufferedImage.getWidth()==bufferedImage.getHeight()&&fis.available()/1024-300>0){  
                size = bufferedImage.getHeight() ;  
            }else if(bufferedImage.getWidth()==bufferedImage.getHeight()&&fis.available()/1024-300<=0){  
                size = bufferedImage.getHeight() ;  
            }else if(bufferedImage.getWidth()
     
      0){  
                size = bufferedImage.getWidth() ;  
            }else if(bufferedImage.getWidth()>bufferedImage.getHeight()&&fis.available()/1024-300==0){  
                size = bufferedImage.getHeight() ;  
            }else if(bufferedImage.getWidth()
      
     
    
    
    

   c.裁剪、等比例压缩        

    在调试的过程中,发现,由于图片的形状和规定的基本上都不一样,但是如果不在需求300kb的图片,如果裁剪之后,也就会变的符合要求,而如果是方形的图片,压缩之后,也不会影响图片的形状,所以,就用这一个方法一块实现了。

    最后将设定好的width、height再次创建BufferedImage,将image对象传入Graphics类,绘制出新的图形,通过ImageIO输出到指定位置即可。

    
  /**  
* 改变图片的大小到宽为size,然后高随着宽等比例变化  
* @param is 上传的图片的输入流  
* @param os 改变了图片的大小后,把图片的流输出到目标OutputStream  
* @param size 新图片的宽  
* @param format 新图片的格式  
* @throws IOException  
*/   
public static void resizeImage(FileInputStream is, FileOutputStream os, int size, String format) throws IOException {   
BufferedImage prevImage = ImageIO.read(is);   
double width = prevImage.getWidth();   
double height = prevImage.getHeight();   
double percent ;  
int newWidth ,newHeight;  
//宽大于高  传进来的size为小值  
if (width>=height) {  
    percent = size/width;   
    newWidth = (int)(width * percent);   
    newHeight = (int) height;   
} else {  
    //宽小于高  
    percent = size/height;  
    newWidth = (int)width;   
    newHeight = (int) (height * percent);  
}  
BufferedImage image = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_BGR);
Graphics graphics = image.createGraphics(); 
graphics.drawImage(prevImage, 0, 0, newWidth, newHeight, null); ImageIO.write(image, format, os); os.flush(); is.close(); os.close(); } 

      Android JAVA 裁剪、压缩图片_第1张图片

***********************************************************************************************************************************

你可能感兴趣的:(Android JAVA 裁剪、压缩图片)