zoukankan      html  css  js  c++  java
  • java上传并压缩图片(等比例压缩或者原尺寸压缩)

    本文转载自http://www.voidcn.com/article/p-npjxrbxr-kd.html

    先看效果:

    原图:1.33M

    处理后:27.4kb

    关键代码;

    package codeGenerate.util;
    
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
      
    public class ImageZipUtil {  
    	
    	public static void main(String[] args) {
    		zipWidthHeightImageFile(new File("C:\spider\3.png"),new File("C:\spider\3-1.jpg"),425,638,0.7f);
    		
    		//zipImageFile(new File("C:\spider\2.JPG"),new File("C:\spider\2-2.JPG"),425,638,0.7f);
    		
    		//zipImageFile(new File("C:\spider\3.jpg"),new File("C:\spider\3-3.jpg"),425,638,0.7f);
    		
    		System.out.println("ok");
    	}
      
        /** 
         * 根据设置的宽高等比例压缩图片文件<br> 先保存原文件,再压缩、上传 
         * @param oldFile  要进行压缩的文件 
         * @param newFile  新文件 
         * @param width  宽度 //设置宽度时(高度传入0,等比例缩放) 
         * @param height 高度 //设置高度时(宽度传入0,等比例缩放) 
         * @param quality 质量 
         * @return 返回压缩后的文件的全路径 
         */  
        public static String zipImageFile(File oldFile,File newFile, int width, int height,float quality) {  
            if (oldFile == null) {  
                return null;  
            }  
            try {  
                /** 对服务器上的临时文件进行处理 */  
                Image srcFile = ImageIO.read(oldFile);  
                int w = srcFile.getWidth(null);  
                int h = srcFile.getHeight(null);  
                double bili;  
                if(width>0){  
                    bili=width/(double)w;  
                    height = (int) (h*bili);  
                }else{  
                    if(height>0){  
                        bili=height/(double)h;  
                        width = (int) (w*bili);  
                    }  
                }  
                
                String srcImgPath = newFile.getAbsoluteFile().toString();
                System.out.println(srcImgPath);
                String subfix = "jpg";
        		subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1,srcImgPath.length());
    
        		BufferedImage buffImg = null; 
        		if(subfix.equals("png")){
        			buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        		}else{
        			buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        		}
    
        		Graphics2D graphics = buffImg.createGraphics();
        		graphics.setBackground(new Color(255,255,255));
        		graphics.setColor(new Color(255,255,255));
        		graphics.fillRect(0, 0, width, height);
        		graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);  
    
        		ImageIO.write(buffImg, subfix, new File(srcImgPath));  
      
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            return newFile.getAbsolutePath();  
        }  
      
        /** 
         * 按设置的宽度高度压缩图片文件<br> 先保存原文件,再压缩、上传 
         * @param oldFile  要进行压缩的文件全路径 
         * @param newFile  新文件 
         * @param width  宽度 
         * @param height 高度 
         * @param quality 质量 
         * @return 返回压缩后的文件的全路径 
         */  
    	public static String zipWidthHeightImageFile(File oldFile,File newFile, int width, int height,float quality) {  
            if (oldFile == null) {  
                return null;  
            }  
            String newImage = null;  
            try {  
                /** 对服务器上的临时文件进行处理 */  
                Image srcFile = ImageIO.read(oldFile);  
                
                String srcImgPath = newFile.getAbsoluteFile().toString();
                System.out.println(srcImgPath);
                String subfix = "jpg";
        		subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1,srcImgPath.length());
    
        		BufferedImage buffImg = null; 
        		if(subfix.equals("png")){
        			buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        		}else{
        			buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        		}
    
        		Graphics2D graphics = buffImg.createGraphics();
        		graphics.setBackground(new Color(255,255,255));
        		graphics.setColor(new Color(255,255,255));
        		graphics.fillRect(0, 0, width, height);
        		graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);  
    
        		ImageIO.write(buffImg, subfix, new File(srcImgPath));  
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            return newImage;  
        }  
    }

    说明:

    1、根据需求大家可以自行设置质量参数quality,到底设置成多少,可以先看下效果在取值;

    2、网上通用的方法用的是jdk自带jar包中方法,我这里衍生了一下:用Graphics2D,能够同时处理jpg和png格式;

    3、new Color(255,255,255)是白色,等同于WHITE,但是用WHITE 的话,Linux下某些图片会有其它色值;

    4、main中的宽425和高638可以根据自己的需求自行设置,但是对于长和宽一样的,按照400(小值的值425)*400来处理;

  • 相关阅读:
    CD4051
    sbit和sfr的定义
    EEPROM与FLASH的区别
    九LWIP学习笔记之最后的战役
    八LWIP学习笔记之用户编程接口(NETCONN)
    七LWIP学习笔记之传输控制协议(TCP)
    六LWIP学习笔记之用户数据报协议(UDP)
    java实现二叉查找树
    线程的锁对象
    MAP
  • 原文地址:https://www.cnblogs.com/abc8023/p/7768506.html
Copyright © 2011-2022 走看看