Java压缩或放大图像处理详解编程语言

大量的图片如何统一处理成固定宽度、或者固定长宽的图片,java中的java.awt包下面的一些类就可以实现图片处理的功能,下面就是自己写的一个简单的实例

 

下面的类是单张图片的处理,里面的参数含义可以参照参数命名:

     /**    
     [email protected]: 压缩或放大图像处理  
     */    
    package cn.lulei.image.deal;     
       
    import java.awt.Color;   
    import java.awt.Font;   
    import java.awt.Graphics2D;   
    import java.awt.Image;   
    import java.awt.image.BufferedImage;   
    import java.io.File;   
    import java.io.FileOutputStream;   
       
    import javax.imageio.ImageIO;   
       
    import com.sun.image.codec.jpeg.JPEGCodec;   
    import com.sun.image.codec.jpeg.JPEGImageEncoder;   
         
    public class DealImage {   
       
        private File file = null;   
        private String inputDir;   
        private String outputDir;   
        private String inputFileName;   
        private String outputFileName;   
        private int outputWidth;   
        private int outputHeight;   
        private boolean proportion;//是否等比压缩   
           
        public DealImage() {   
            this.inputDir = "";   
            this.outputDir = "";   
            this.inputFileName = "";   
            this.outputFileName = "";   
            this.outputHeight = 200;   
            this.outputWidth = 200;   
            this.proportion = true;   
        }   
           
        public void setInputDir(String inputDir){   
            this.inputDir = inputDir;   
        }   
        public void setOutputDir(String outputDir){   
            this.outputDir = outputDir;   
        }   
        public void setInputFileName(String inputFileName){   
            this.inputFileName = inputFileName;   
        }   
        public void setOutputFileName(String outputFileName){   
            this.outputFileName = outputFileName;   
        }   
        public void setWidthAngHeight(int outputWidth, int outputHeight){   
            this.outputWidth = outputWidth;   
            this.outputHeight = outputHeight;   
        }   
           
        /**  
         * @param isVip  
         * @Date: 2013-8-7    
         * @Author: lulei    
         * @Description:处理图片  
         */   
        private void dealImage(boolean isVip) {   
            try {   
                this.file = new File(this.inputDir + this.inputFileName);   
                if (!this.file.exists()){   
                    return;   
                }   
                Image img = ImageIO.read(this.file);   
                if (img.getWidth(null) == -1) {   
                    return;   
                }   
                int[] widthAndHeight = this.getNewWidthAndHeight(img);   
                BufferedImage bufferedImage = new BufferedImage(widthAndHeight[0], widthAndHeight[1], BufferedImage.TYPE_INT_RGB);   
                Graphics2D g = bufferedImage.createGraphics();   
                g.drawImage(img.getScaledInstance(widthAndHeight[0], widthAndHeight[1], Image.SCALE_SMOOTH), 0, 0, null);   
                if (!isVip) {   
                    g.setFont(new Font("楷体", Font.ITALIC, 14));   
                    g.setColor(Color.getHSBColor(1.0f, 0.3f, 1.0f));   
                    g.drawString("想要添加的水印", widthAndHeight[0]/3, widthAndHeight[1]/2);   
                }   
                File fileOut = new File(this.outputDir);   
                if (!fileOut.exists()) {   
                    fileOut.mkdirs();   
                }   
                FileOutputStream fileOutputStream = new FileOutputStream(this.outputDir + this.outputFileName);   
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOutputStream);   
                encoder.encode(bufferedImage);   
                g.dispose();   
                fileOutputStream.close();   
            } catch (Exception e) {   
    //          e.printStackTrace();   
                System.out.println("There're some errors when handling picture which path is :" + this.inputDir + this.inputFileName);   
            }   
        }   
           
        /**  
         * @param inputDir  
         * @param inputFileName  
         * @param outputDir  
         * @param outputFileName  
         * @param isVip  
         * @Date: 2013-8-7    
         * @Author: lulei    
         * @Description:处理图片  
         */   
        public void dealImage(String inputDir, String inputFileName, String outputDir, String outputFileName, boolean isVip) {   
            this.dealImage(inputDir, inputFileName, outputDir, outputFileName, this.outputWidth, this.outputHeight, this.proportion, isVip);   
        }   
           
        /**  
         * @param inputDir  
         * @param inputFileName  
         * @param outputDir  
         * @param outputFileName  
         * @param outputWidth  
         * @param outputHeight  
         * @param isVip  
         * @Date: 2013-8-7    
         * @Author: lulei    
         * @Description:处理图片  
         */   
        public void dealImage(String inputDir, String inputFileName, String outputDir, String outputFileName, int outputWidth, int outputHeight, boolean isVip) {   
            this.dealImage(inputDir, inputFileName, outputDir, outputFileName, outputWidth, outputHeight, this.proportion, isVip);   
        }   
           
        /**  
         * @param inputDir  
         * @param inputFileName  
         * @param outputDir  
         * @param outputFileName  
         * @param outputWidth  
         * @param outputHeight  
         * @param proportion  
         * @param isVip  
         * @Date: 2013-8-7    
         * @Author: lulei    
         * @Description:处理图片  
         */   
        public void dealImage(String inputDir, String inputFileName, String outputDir, String outputFileName, int outputWidth, int outputHeight, boolean proportion, boolean isVip) {   
            this.inputDir = inputDir;   
            this.inputFileName = inputFileName;   
            this.outputDir = outputDir;   
            this.outputFileName = outputFileName;   
            this.outputWidth = outputWidth;   
            this.outputHeight = outputHeight;   
            this.proportion = proportion;   
            this.dealImage(isVip);   
        }   
           
        /**  
         * @param img  
         * @return  
         * @Date: 2013-8-7    
         * @Author: lulei    
         * @Description:返回压缩后的图片宽和高  
         */   
        private int[] getNewWidthAndHeight(Image img){   
            int[] reInt = new int[2];   
            if (this.proportion) {   
                double rateW = ((double)img.getWidth(null)) / (double)this.outputWidth + 0.1;   
                double rateH = ((double)img.getHeight(null)) / (double)this.outputHeight + 0.1;   
                double rate = rateW > rateH ? rateW :rateH;   
                reInt[0] = (int)(((double)img.getWidth(null)) / rate);   
                reInt[1] = (int)(((double)img.getHeight(null)) / rate);   
            } else {   
                reInt[0] = this.outputWidth;   
                reInt[1] = this.outputHeight;   
            }   
            return reInt;   
        }   
    }   
 
  
 
  
 
下面的类是对图片文件或者图片文件夹做统一的处理: 
Java代码  收藏代码 
 
     /**    
     [email protected]:   批处理文件夹下的所有图片    
     */    
    package cn.lulei.image.deal;     
       
    import java.io.File;   
       
    import cn.lulei.image.deal.DealImage;   
         
         
    public class DealImageFile {   
           
        //图片后缀名   
        private static String[] IMG_TYPE = {".jpg",".bmp",".jpeg",".png",".pcx",".tiff",".gif",".tga",".exif"   
                ,".fpx",".svg",".psd","cdr",".pcd",".dxf",".ufo",".eps",".hdri",".ai",".raw"};    
        private static int outputHeight = 200;   
        private static int outputWidth = 200;   
        private static int count = 0;   
        private static boolean proportion = true;   
           
        public String dealImageFile(String inputDir, String outputDir) {   
            return this.dealImageFile(inputDir, outputDir, outputWidth, outputHeight, proportion);   
        }   
           
        public String dealImageFile(String inputDir, String outputDir, int outputWidth, int outputHeight) {   
            return this.dealImageFile(inputDir, outputDir, outputWidth, outputHeight, proportion);   
        }   
        /**  
         * @param inputDir  
         * @param outputDir  
         * @param outputWidth  
         * @param outputHeight  
         * @param proportion  
         * @return  
         * @Date: 2013-8-7    
         * @Author: lulei    
         * @Description:批处理文件夹下的文件  
         */   
        public String dealImageFile(String inputDir, String outputDir, int outputWidth, int outputHeight, boolean proportion) {   
            File fileDir = new File(inputDir);   
            File[] files = fileDir.listFiles();   
            DealImage dealImage = new DealImage();   
            for (File file : files) {   
                String imgPath = file.toString().toLowerCase();   
                String fileName = imgPath.substring(inputDir.length());   
                if (this.isImage(imgPath)) {   
                    dealImage.dealImage(inputDir, fileName, outputDir, fileName, outputWidth, outputHeight, proportion, true);   
                    count++;    
                } else if (file.isDirectory()) {   
                    if (!imgPath.equals(outputDir.toLowerCase())) {   
                        //这里是递归   
                        this.dealImageFile(imgPath, outputDir + "/" + fileName, outputWidth, outputHeight, proportion);   
                    }   
                }   
            }   
            return "Handle " + count + " pictures! ";   
        }   
           
        private boolean isImage(String imgPath) {   
            for (String str : IMG_TYPE) {   
                if (imgPath.endsWith(str)) {   
                    return true;   
                }   
            }   
            return false;   
        }   
           
        public static void main(String[] args) {   
            // TODO Auto-generated method stub     
               
        }   
       
    }  

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10807.html

(0)
上一篇 2021年7月19日 10:29
下一篇 2021年7月19日 10:29

相关推荐

发表回复

登录后才能评论