`
zzc1684
  • 浏览: 1224196 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Java imageIO处理图像

    博客分类:
  • Java
阅读更多
    package com.adam.dev.pic.easyImage;  
    import java.awt.AlphaComposite;  
    import java.awt.Color;  
    import java.awt.Font;  
    import java.awt.Graphics;  
    import java.awt.Graphics2D;  
    import java.awt.Point;  
    import java.awt.Rectangle;  
    import java.awt.color.ColorSpace;  
    import java.awt.image.BufferedImage;  
    import java.awt.image.ColorConvertOp;  
    import java.io.BufferedReader;  
    import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.FileOutputStream;  
    import java.io.FileReader;  
    import java.io.IOException;  
    import java.io.InputStream;  
    import java.io.OutputStream;  
    import java.util.Iterator;  
    import java.util.List;  
      
    import javax.imageio.ImageIO;  
    import javax.imageio.ImageReadParam;  
    import javax.imageio.ImageReader;  
    import javax.imageio.stream.ImageInputStream;  
      
    import com.sun.image.codec.jpeg.JPEGCodec;  
    import com.sun.image.codec.jpeg.JPEGImageEncoder;  
      
    /** 
     * @author adam.胡升阳 
     * 创建日期 2012-2-29 
     */  
    public class OperateImage{  
      
        public OperateImage() {  
            super();  
        }  
      
        /**  
         * 对图片裁剪,并把裁剪新图片保存  
         * @param srcPath 读取源图片路径 
         * @param toPath    写入图片路径 
         * @param x 剪切起始点x坐标 
         * @param y 剪切起始点y坐标 
         * @param width 剪切宽度 
         * @param height     剪切高度 
         * @param readImageFormat  读取图片格式 
         * @param writeImageFormat 写入图片格式 
         * @throws IOException 
         */  
        public void cropImage(String srcPath,String toPath,  
                int x,int y,int width,int height,  
                String readImageFormat,String writeImageFormat) throws IOException{     
            FileInputStream fis = null ;  
            ImageInputStream iis =null ;  
            try{     
                //读取图片文件   
                fis = new FileInputStream(srcPath);   
                Iterator it = ImageIO.getImageReadersByFormatName(readImageFormat);   
                ImageReader reader = (ImageReader) it.next();   
                //获取图片流    
                iis = ImageIO.createImageInputStream(fis);    
                reader.setInput(iis,true) ;  
                ImageReadParam param = reader.getDefaultReadParam();   
                //定义一个矩形   
                Rectangle rect = new Rectangle(x, y, width, height);   
                //提供一个 BufferedImage,将其用作解码像素数据的目标。    
                param.setSourceRegion(rect);  
                BufferedImage bi = reader.read(0,param);                  
                //保存新图片    
                ImageIO.write(bi, writeImageFormat, new File(toPath));       
            }finally{  
                if(fis!=null)  
                    fis.close();         
                if(iis!=null)  
                   iis.close();   
            }   
        }  
      
        /** 
         * 按倍率缩小图片 
         * @param srcImagePath 读取图片路径 
         * @param toImagePath 写入图片路径 
         * @param widthRatio    宽度缩小比例 
         * @param heightRatio    高度缩小比例 
         * @throws IOException 
         */  
        public void reduceImageByRatio(String srcImagePath,String toImagePath,int widthRatio,int heightRatio) throws IOException{  
            FileOutputStream out = null;  
            try{  
                //读入文件     
                File file = new File(srcImagePath);    
                // 构造Image对象     
                BufferedImage src = javax.imageio.ImageIO.read(file);    
                int width = src.getWidth();    
                int height = src.getHeight();    
                // 缩小边长    
                BufferedImage tag = new BufferedImage(width / widthRatio, height / heightRatio, BufferedImage.TYPE_INT_RGB);    
                // 绘制 缩小  后的图片    
                tag.getGraphics().drawImage(src, 0, 0, width / widthRatio, height / heightRatio, null);    
                out = new FileOutputStream(toImagePath);    
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);    
                encoder.encode(tag);    
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(out != null){  
                    out.close();    
                }  
            }  
        }  
      
        /** 
         * 长高等比例缩小图片 
         * @param srcImagePath 读取图片路径 
         * @param toImagePath 写入图片路径 
         * @param ratio 缩小比例 
         * @throws IOException 
         */  
        public void reduceImageEqualProportion(String srcImagePath,String toImagePath,int ratio) throws IOException{  
            FileOutputStream out = null;  
            try{  
                //读入文件     
                File file = new File(srcImagePath);    
                // 构造Image对象     
                BufferedImage src = javax.imageio.ImageIO.read(file);    
                int width = src.getWidth();    
                int height = src.getHeight();    
                // 缩小边长    
                BufferedImage tag = new BufferedImage(width / ratio, height / ratio, BufferedImage.TYPE_INT_RGB);    
                // 绘制 缩小  后的图片    
                tag.getGraphics().drawImage(src, 0, 0, width / ratio, height / ratio, null);    
                out = new FileOutputStream(toImagePath);    
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);    
                encoder.encode(tag);    
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(out != null){  
                    out.close();    
                }  
            }  
        }  
          
        /** 
         * 按倍率放大图片 
         * @param srcImagePath 读取图形路径 
         * @param toImagePath 写入入行路径 
         * @param widthRatio    宽度放大比例 
         * @param heightRatio 高度放大比例 
         * @throws IOException 
         */  
        public void enlargementImageByRatio(String srcImagePath,String toImagePath,int widthRatio,int heightRatio) throws IOException{  
            FileOutputStream out = null;  
            try{  
                //读入文件     
                File file = new File(srcImagePath);    
                // 构造Image对象     
                BufferedImage src = javax.imageio.ImageIO.read(file);    
                int width = src.getWidth();    
                int height = src.getHeight();    
                // 放大边长   
                BufferedImage tag = new BufferedImage(width * widthRatio, height * heightRatio, BufferedImage.TYPE_INT_RGB);    
                //绘制放大后的图片   
                tag.getGraphics().drawImage(src, 0, 0, width * widthRatio, height * heightRatio, null);    
                out = new FileOutputStream(toImagePath);    
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);    
                encoder.encode(tag);    
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(out != null){  
                    out.close();    
                }  
            }  
        }  
          
          
        /** 
         * 长高等比例放大图片 
         * @param srcImagePath 读取图形路径 
         * @param toImagePath 写入入行路径 
         * @param ratio 放大比例 
         * @throws IOException 
         */  
        public void enlargementImageEqualProportion(String srcImagePath,String toImagePath,int ratio) throws IOException{  
            FileOutputStream out = null;  
            try{  
                //读入文件     
                File file = new File(srcImagePath);    
                // 构造Image对象     
                BufferedImage src = javax.imageio.ImageIO.read(file);    
                int width = src.getWidth();    
                int height = src.getHeight();    
                // 放大边长   
                BufferedImage tag = new BufferedImage(width * ratio, height * ratio, BufferedImage.TYPE_INT_RGB);    
                //绘制放大后的图片   
                tag.getGraphics().drawImage(src, 0, 0, width * ratio, height * ratio, null);    
                out = new FileOutputStream(toImagePath);    
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);    
                encoder.encode(tag);    
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(out != null){  
                    out.close();    
                }  
            }  
        }  
          
        /** 
         * 重置图形的边长大小 
         * @param srcImagePath  
         * @param toImagePath 
         * @param width 
         * @param height 
         * @throws IOException 
         */  
        public void resizeImage(String srcImagePath,String toImagePath,int width,int height) throws IOException{  
            FileOutputStream out = null;  
            try{  
                //读入文件     
                File file = new File(srcImagePath);    
                // 构造Image对象     
                BufferedImage src = javax.imageio.ImageIO.read(file);    
                // 放大边长   
                BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);    
                //绘制放大后的图片   
                tag.getGraphics().drawImage(src, 0, 0, width, height, null);    
                out = new FileOutputStream(toImagePath);    
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);    
                encoder.encode(tag);    
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(out != null){  
                    out.close();    
                }  
            }  
        }  
          
        /** 
         * 横向拼接图片(两张) 
         * @param firstSrcImagePath 第一张图片的路径 
         * @param secondSrcImagePath    第二张图片的路径 
         * @param imageFormat   拼接生成图片的格式 
         * @param toPath    拼接生成图片的路径 
         */  
        public void joinImagesHorizontal(String firstSrcImagePath, String secondSrcImagePath,String imageFormat, String toPath){    
            try {    
                //读取第一张图片       
                File  fileOne  =  new  File(firstSrcImagePath);      
                BufferedImage  imageOne = ImageIO.read(fileOne);      
                int  width  =  imageOne.getWidth();//图片宽度       
                int  height  =  imageOne.getHeight();//图片高度       
                //从图片中读取RGB       
                int[]  imageArrayOne  =  new  int[width*height];      
                imageArrayOne  =  imageOne.getRGB(0,0,width,height,imageArrayOne,0,width);      
                 
                //对第二张图片做相同的处理       
                File  fileTwo  =  new  File(secondSrcImagePath);      
                BufferedImage  imageTwo  =  ImageIO.read(fileTwo);   
                int width2 = imageTwo.getWidth();  
                int height2 = imageTwo.getHeight();  
                int[]   ImageArrayTwo  =  new  int[width2*height2];      
                ImageArrayTwo  =  imageTwo.getRGB(0,0,width,height,ImageArrayTwo,0,width);      
                //ImageArrayTwo  =  imageTwo.getRGB(0,0,width2,height2,ImageArrayTwo,0,width2);    
                 
                //生成新图片   
                //int height3 = (height>height2 || height==height2)?height:height2;   
                BufferedImage  imageNew  =  new  BufferedImage(width*2,height,BufferedImage.TYPE_INT_RGB);      
                //BufferedImage  imageNew  =  new  BufferedImage(width+width2,height3,BufferedImage.TYPE_INT_RGB);       
                imageNew.setRGB(0,0,width,height,imageArrayOne,0,width);//设置左半部分的RGB     
                imageNew.setRGB(width,0,width,height,ImageArrayTwo,0,width);//设置右半部分的RGB    
                //imageNew.setRGB(width,0,width2,height2,ImageArrayTwo,0,width2);//设置右半部分的RGB       
                 
                File  outFile  =  new  File(toPath);      
                ImageIO.write(imageNew,  imageFormat,  outFile);//写图片   
            } catch (Exception e) {    
                e.printStackTrace();    
            }    
        }  
          
        /** 
         * 横向拼接一组(多张)图像 
         * @param pics  将要拼接的图像 
         * @param type 图像写入格式 
         * @param dst_pic 图像写入路径 
         * @return 
         */  
        public  boolean joinImageListHorizontal(String[] pics, String type, String dst_pic) {     
            try {    
                int len = pics.length;    
                if (len < 1) {    
                    System.out.println("pics len < 1");    
                    return false;    
                }    
                File[] src = new File[len];    
                BufferedImage[] images = new BufferedImage[len];    
                int[][] imageArrays = new int[len][];    
                for (int i = 0; i < len; i++) {    
                    src[i] = new File(pics[i]);    
                    images[i] = ImageIO.read(src[i]);    
                    int width = images[i].getWidth();    
                    int height = images[i].getHeight();    
                    imageArrays[i] = new int[width * height];// 从图片中读取RGB       
                    imageArrays[i] = images[i].getRGB(0, 0, width, height,  imageArrays[i], 0, width);    
                }    
                  
                int dst_width = 0;    
                int dst_height = images[0].getHeight();    
                for (int i = 0; i < images.length; i++) {    
                    dst_height = dst_height > images[i].getHeight() ? dst_height : images[i].getHeight();    
                    dst_width += images[i].getWidth();  
                }    
                //System.out.println(dst_width);     
                //System.out.println(dst_height);     
                if (dst_height < 1) {    
                    System.out.println("dst_height < 1");    
                    return false;    
                }   
                /* 
                 * 生成新图片 
                 */     
                BufferedImage ImageNew = new BufferedImage(dst_width, dst_height,  BufferedImage.TYPE_INT_RGB);    
                int width_i = 0;  
                for (int i = 0; i < images.length; i++) {    
                    ImageNew.setRGB(width_i, 0, images[i].getWidth(), dst_height,  imageArrays[i], 0, images[i].getWidth());    
                    width_i += images[i].getWidth();  
                }    
                File outFile = new File(dst_pic);    
                ImageIO.write(ImageNew, type, outFile);// 写图片      
            } catch (Exception e) {    
                e.printStackTrace();    
                return false;    
            }    
            return true;    
        }  
          
        /** 
         * 纵向拼接图片(两张) 
         * @param firstSrcImagePath 读取的第一张图片 
         * @param secondSrcImagePath    读取的第二张图片 
         * @param imageFormat 图片写入格式 
         * @param toPath    图片写入路径 
         */  
        public void joinImagesVertical(String firstSrcImagePath, String secondSrcImagePath,String imageFormat, String toPath){    
            try {    
                //读取第一张图片       
                File  fileOne  =  new  File(firstSrcImagePath);      
                BufferedImage  imageOne = ImageIO.read(fileOne);      
                int  width  =  imageOne.getWidth();//图片宽度       
                int  height  =  imageOne.getHeight();//图片高度       
                //从图片中读取RGB       
                int[]  imageArrayOne  =  new  int[width*height];      
                imageArrayOne  =  imageOne.getRGB(0,0,width,height,imageArrayOne,0,width);      
             
                //对第二张图片做相同的处理       
                File  fileTwo  =  new  File(secondSrcImagePath);      
                BufferedImage  imageTwo  =  ImageIO.read(fileTwo);   
                int width2 = imageTwo.getWidth();  
                int height2 = imageTwo.getHeight();  
                int[]   ImageArrayTwo  =  new  int[width2*height2];      
                ImageArrayTwo  =  imageTwo.getRGB(0,0,width,height,ImageArrayTwo,0,width);      
                //ImageArrayTwo  =  imageTwo.getRGB(0,0,width2,height2,ImageArrayTwo,0,width2);    
             
                //生成新图片   
                //int width3 = (width>width2 || width==width2)?width:width2;   
                BufferedImage  imageNew  =  new  BufferedImage(width,height*2,BufferedImage.TYPE_INT_RGB);      
                //BufferedImage  imageNew  =  new  BufferedImage(width3,height+height2,BufferedImage.TYPE_INT_RGB);       
                imageNew.setRGB(0,0,width,height,imageArrayOne,0,width);//设置上半部分的RGB       
                imageNew.setRGB(0,height,width,height,ImageArrayTwo,0,width);//设置下半部分的RGB   
                //imageNew.setRGB(0,height,width2,height2,ImageArrayTwo,0,width2);//设置下半部分的RGB       
             
                File  outFile  =  new  File(toPath);      
                ImageIO.write(imageNew,  imageFormat,  outFile);//写图片   
            } catch (Exception e) {    
                e.printStackTrace();    
            }    
        }  
          
        /** 
         * 纵向拼接一组(多张)图像 
         * @param pics      将要拼接的图像数组 
         * @param type  写入图像类型 
         * @param dst_pic   写入图像路径 
         * @return 
         */  
        public  boolean joinImageListVertical(String[] pics, String type, String dst_pic) {     
            try {    
                int len = pics.length;    
                if (len < 1) {    
                    System.out.println("pics len < 1");    
                    return false;    
                }    
                 File[] src = new File[len];    
                 BufferedImage[] images = new BufferedImage[len];    
                 int[][] imageArrays = new int[len][];    
                 for (int i = 0; i < len; i++) {    
                    //System.out.println(i);   
                    src[i] = new File(pics[i]);    
                    images[i] = ImageIO.read(src[i]);    
                    int width = images[i].getWidth();    
                    int height = images[i].getHeight();    
                    imageArrays[i] = new int[width * height];// 从图片中读取RGB      
                    imageArrays[i] = images[i].getRGB(0, 0, width, height,  imageArrays[i], 0, width);    
                }    
                   
                int dst_height = 0;    
                int dst_width = images[0].getWidth();    
                for (int i = 0; i < images.length; i++) {    
                    dst_width = dst_width > images[i].getWidth() ? dst_width : images[i].getWidth();    
                    dst_height += images[i].getHeight();    
                }    
                //System.out.println(dst_width);     
                //System.out.println(dst_height);     
                if (dst_height < 1) {    
                    System.out.println("dst_height < 1");    
                    return false;    
                }    
                /* 
                 * 生成新图片 
                 */     
                BufferedImage ImageNew = new BufferedImage(dst_width, dst_height,  BufferedImage.TYPE_INT_RGB);    
                int height_i = 0;    
                for (int i = 0; i < images.length; i++) {    
                    ImageNew.setRGB(0, height_i, dst_width, images[i].getHeight(),  imageArrays[i], 0, dst_width);    
                    height_i += images[i].getHeight();    
                }    
                File outFile = new File(dst_pic);    
                ImageIO.write(ImageNew, type, outFile);// 写图片      
            } catch (Exception e) {    
                e.printStackTrace();    
                return false;    
            }    
            return true;    
        }    
          
        /** 
         * 合并图片(按指定初始x、y坐标将附加图片贴到底图之上) 
         * @param negativeImagePath 背景图片路径 
         * @param additionImagePath 附加图片路径 
         * @param x 附加图片的起始点x坐标 
         * @param y  附加图片的起始点y坐标 
         * @param toPath 图片写入路径 
         * @throws IOException 
         */  
        public void mergeBothImage(String negativeImagePath,String additionImagePath,int x,int y,String toPath ) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                is2=new FileInputStream(additionImagePath);  
                BufferedImage image=ImageIO.read(is);  
                BufferedImage image2=ImageIO.read(is2);  
                Graphics g=image.getGraphics();  
                g.drawImage(image2,x,y,null);  
                os = new FileOutputStream(toPath);  
                JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);  
                enc.encode(image);  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /**  
         * 将一组图片一次性附加合并到底图上 
         * @param negativeImagePath     源图像(底图)路径 
         * @param additionImageList 附加图像信息列表 
         * @param imageFormat   图像写入格式 
         * @param toPath    图像写入路径 
         * @throws IOException 
         */  
        public void mergeImageList(String negativeImagePath,List additionImageList,String imageFormat, String toPath) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                BufferedImage image=ImageIO.read(is);  
                //Graphics g=image.getGraphics();   
                Graphics2D g = image.createGraphics();;  
                BufferedImage image2 = null;  
                if(additionImageList != null){  
                    for(int i=0;i<additionImageList.size();i++){  
                        //解析附加图片信息:x坐标、 y坐标、 additionImagePath附加图片路径   
                        //图片信息存储在一个数组中   
                        String[] additionImageInfo = (String[]) additionImageList.get(i);  
                        int x = Integer.parseInt(additionImageInfo[0]);  
                        int y = Integer.parseInt(additionImageInfo[1]);  
                        String additionImagePath = additionImageInfo[2];  
                        //读取文件输入流,并合并图片   
                        is2 = new FileInputStream(additionImagePath);  
                        //System.out.println(x+"  :  "+y+"  :  "+additionImagePath);   
                        image2 = ImageIO.read(is2);  
                        g.drawImage(image2,x,y,null);  
                    }  
                }  
                os = new FileOutputStream(toPath);  
                ImageIO.write(image,  imageFormat,  os);//写图片   
                //JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);   
                //enc.encode(image);   
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /** 
         * 将附加图片合并到底图的左上角 
         * @param negativeImagePath 底图路径 
         * @param additionImagePath 附加图片路径 
         * @param toPath    合成图片写入路径 
         * @throws IOException 
         */  
        public void mergeBothImageTopleftcorner(String negativeImagePath,String additionImagePath,String toPath ) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                is2=new FileInputStream(additionImagePath);  
                BufferedImage image=ImageIO.read(is);  
                BufferedImage image2=ImageIO.read(is2);  
                Graphics g=image.getGraphics();  
                g.drawImage(image2,0,0,null);  
                os = new FileOutputStream(toPath);  
                JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);  
                enc.encode(image);  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /** 
         * 将附加图片合并到底图的右上角 
         * @param negativeImagePath 底图路径 
         * @param additionImagePath 附加图片路径 
         * @param toPath    合成图片写入路径 
         * @throws IOException 
         */  
        public void mergeBothImageToprightcorner(String negativeImagePath,String additionImagePath,String toPath ) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                is2=new FileInputStream(additionImagePath);  
                BufferedImage image=ImageIO.read(is);  
                BufferedImage image2=ImageIO.read(is2);  
                Graphics g=image.getGraphics();  
                g.drawImage(image2,image.getWidth()-image2.getWidth(),0,null);  
                os = new FileOutputStream(toPath);  
                JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);  
                enc.encode(image);  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /** 
         * 将附加图片合并到底图的左下角 
         * @param negativeImagePath 底图路径 
         * @param additionImagePath 附加图片路径 
         * @param toPath    合成图片写入路径 
         * @throws IOException 
         */  
        public void mergeBothImageLeftbottom(String negativeImagePath,String additionImagePath,String toPath ) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                is2=new FileInputStream(additionImagePath);  
                BufferedImage image=ImageIO.read(is);  
                BufferedImage image2=ImageIO.read(is2);  
                Graphics g=image.getGraphics();  
                g.drawImage(image2,0,image.getHeight()-image2.getHeight(),null);  
                os = new FileOutputStream(toPath);  
                JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);  
                enc.encode(image);  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /** 
         * 将附加图片合并到底图的左下角 
         * @param negativeImagePath 底图路径 
         * @param additionImagePath 附加图片路径 
         * @param toPath    合成图片写入路径 
         * @throws IOException 
         */  
        public void mergeBothImageRightbottom(String negativeImagePath,String additionImagePath,String toPath ) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                is2=new FileInputStream(additionImagePath);  
                BufferedImage image=ImageIO.read(is);  
                BufferedImage image2=ImageIO.read(is2);  
                Graphics g=image.getGraphics();  
                g.drawImage(image2,image.getWidth()-image2.getWidth(),image.getHeight()-image2.getHeight(),null);  
                os = new FileOutputStream(toPath);  
                JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);  
                enc.encode(image);  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /** 
         * 将附加图片合并到底图的正中央 
         * @param negativeImagePath 底图路径 
         * @param additionImagePath 附加图片路径 
         * @param toPath    合成图片写入路径 
         * @throws IOException 
         */  
        public void mergeBothImageCenter(String negativeImagePath,String additionImagePath,String toPath ) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                is2=new FileInputStream(additionImagePath);  
                BufferedImage image=ImageIO.read(is);  
                BufferedImage image2=ImageIO.read(is2);  
                Graphics g=image.getGraphics();  
                g.drawImage(image2,image.getWidth()/2-image2.getWidth()/2,image.getHeight()/2-image2.getHeight()/2,null);  
                os = new FileOutputStream(toPath);  
                JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);  
                enc.encode(image);  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /** 
         * 将附加图片合并到底图的上边中央 
         * @param negativeImagePath 底图路径 
         * @param additionImagePath 附加图片路径 
         * @param toPath    合成图片写入路径 
         * @throws IOException 
         */  
        public void mergeBothImageTopcenter(String negativeImagePath,String additionImagePath,String toPath ) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                is2=new FileInputStream(additionImagePath);  
                BufferedImage image=ImageIO.read(is);  
                BufferedImage image2=ImageIO.read(is2);  
                Graphics g=image.getGraphics();  
                g.drawImage(image2,image.getWidth()/2-image2.getWidth()/2,0,null);  
                os = new FileOutputStream(toPath);  
                JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);  
                enc.encode(image);  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /** 
         * 将附加图片合并到底图的下边中央 
         * @param negativeImagePath 底图路径 
         * @param additionImagePath 附加图片路径 
         * @param toPath    合成图片写入路径 
         * @throws IOException 
         */  
        public void mergeBothImageBottomcenter(String negativeImagePath,String additionImagePath,String toPath ) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                is2=new FileInputStream(additionImagePath);  
                BufferedImage image=ImageIO.read(is);  
                BufferedImage image2=ImageIO.read(is2);  
                Graphics g=image.getGraphics();  
                g.drawImage(image2,image.getWidth()/2-image2.getWidth()/2,image.getHeight()-image2.getHeight(),null);  
                os = new FileOutputStream(toPath);  
                JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);  
                enc.encode(image);  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /** 
         * 将附加图片合并到底图的左边中央 
         * @param negativeImagePath 底图路径 
         * @param additionImagePath 附加图片路径 
         * @param toPath    合成图片写入路径 
         * @throws IOException 
         */  
        public void mergeBothImageLeftcenter(String negativeImagePath,String additionImagePath,String toPath ) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                is2=new FileInputStream(additionImagePath);  
                BufferedImage image=ImageIO.read(is);  
                BufferedImage image2=ImageIO.read(is2);  
                Graphics g=image.getGraphics();  
                g.drawImage(image2,0,image.getHeight()/2-image2.getHeight()/2,null);  
                os = new FileOutputStream(toPath);  
                JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);  
                enc.encode(image);  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /** 
         * 将附加图片合并到底图的右边中央 
         * @param negativeImagePath 底图路径 
         * @param additionImagePath 附加图片路径 
         * @param toPath    合成图片写入路径 
         * @throws IOException 
         */  
        public void mergeBothImageRightcenter(String negativeImagePath,String additionImagePath,String toPath ) throws IOException{  
            InputStream is= null;  
            InputStream is2= null;  
            OutputStream os = null;  
            try{  
                is=new FileInputStream(negativeImagePath);  
                is2=new FileInputStream(additionImagePath);  
                BufferedImage image=ImageIO.read(is);  
                BufferedImage image2=ImageIO.read(is2);  
                Graphics g=image.getGraphics();  
                g.drawImage(image2,image.getWidth()-image2.getWidth(),image.getHeight()/2-image2.getHeight()/2,null);  
                os = new FileOutputStream(toPath);  
                JPEGImageEncoder enc=JPEGCodec.createJPEGEncoder(os);  
                enc.encode(image);  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                if(os != null){  
                    os.close();  
                }  
                if(is2 != null){  
                    is2.close();  
                }  
                if(is != null){  
                    is.close();  
                }  
            }  
        }  
          
        /** 
         * 图片灰化操作 
         * @param srcImage 读取图片路径 
         * @param toPath    写入灰化后的图片路径 
         * @param imageFormat 图片写入格式 
         */   
        public void grayImage(String srcImage,String toPath,String imageFormat){  
            try{  
                BufferedImage src = ImageIO.read(new File(srcImage));  
                ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);  
                ColorConvertOp op = new ColorConvertOp(cs, null);  
                src = op.filter(src, null);  
                ImageIO.write(src, imageFormat, new File(toPath));  
            }catch(Exception e){  
                e.printStackTrace();  
            }  
        }  
          
        /** 
         * 在源图片上设置水印文字 
         * @param srcImagePath  源图片路径 
         * @param alpha 透明度(0<alpha<1) 
         * @param font  字体(例如:宋体) 
         * @param fontStyle     字体格式(例如:普通样式--Font.PLAIN、粗体--Font.BOLD ) 
         * @param fontSize  字体大小 
         * @param color 字体颜色(例如:黑色--Color.BLACK) 
         * @param inputWords        输入显示在图片上的文字 
         * @param x     文字显示起始的x坐标 
         * @param y     文字显示起始的y坐标 
         * @param imageFormat   写入图片格式(png/jpg等) 
         * @param toPath    写入图片路径 
         * @throws IOException  
         */  
        public void alphaWords2Image(String srcImagePath,float alpha,  
                String font,int fontStyle,int fontSize,Color color,  
                String inputWords,int x,int y,String imageFormat,String toPath) throws IOException{  
            FileOutputStream fos=null;  
            try {  
                BufferedImage image = ImageIO.read(new File(srcImagePath));  
                //创建java2D对象   
                Graphics2D g2d=image.createGraphics();  
                //用源图像填充背景   
                g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null, null);  
                //设置透明度   
                AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);  
                g2d.setComposite(ac);  
                //设置文字字体名称、样式、大小   
                g2d.setFont(new Font(font, fontStyle, fontSize));  
                g2d.setColor(color);//设置字体颜色   
                g2d.drawString(inputWords, x, y); //输入水印文字及其起始x、y坐标   
                g2d.dispose();  
                fos=new FileOutputStream(toPath);  
                ImageIO.write(image, imageFormat, fos);  
            } catch (Exception e) {  
               e.printStackTrace();  
            }finally{  
                if(fos!=null){  
                    fos.close();  
                }  
            }  
        }  
          
        /** 
         * 在源图像上设置图片水印   
         *  ---- 当alpha==1时文字不透明(和在图片上直接输入文字效果一样) 
         * @param srcImagePath  源图片路径 
         * @param appendImagePath   水印图片路径 
         * @param alpha 透明度 
         * @param x     水印图片的起始x坐标 
         * @param y     水印图片的起始y坐标 
         * @param width 水印图片的宽度 
         * @param height        水印图片的高度 
         * @param imageFormat   图像写入图片格式 
         * @param toPath    图像写入路径 
         * @throws IOException  
         */  
        public void alphaImage2Image(String srcImagePath,String appendImagePath,  
                float alpha,int x,int y,int width,int height,  
                String imageFormat,String toPath) throws IOException{  
            FileOutputStream fos = null;  
            try {  
                BufferedImage image = ImageIO.read(new File(srcImagePath));  
                //创建java2D对象   
                Graphics2D g2d=image.createGraphics();  
                //用源图像填充背景   
                g2d.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null, null);  
                //设置透明度   
                AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);  
                g2d.setComposite(ac);  
                //设置水印图片的起始x/y坐标、宽度、高度   
                BufferedImage appendImage = ImageIO.read(new File(appendImagePath));  
                g2d.drawImage(appendImage, x, y, width, height, null, null);  
                g2d.dispose();  
                fos=new FileOutputStream(toPath);  
                ImageIO.write(image, imageFormat, fos);  
            } catch (Exception e) {  
               e.printStackTrace();  
            }finally{  
                if(fos!=null){  
                    fos.close();  
                }  
            }  
        }  
          
        /** 
         * 画单点 ---- 实际上是画一个填充颜色的圆 
         * ---- 以指定点坐标为中心画一个小半径的圆形,并填充其颜色来充当点 
         * @param srcImagePath   源图片颜色 
         * @param x     点的x坐标 
         * @param y     点的y坐标 
         * @param width 填充的宽度 
         * @param height    填充的高度 
         * @param ovalColor 填充颜色 
         * @param imageFormat   写入图片格式 
         * @param toPath    写入路径 
         * @throws IOException 
         */  
        public void drawPoint(String srcImagePath,int x,int y,int width,int height,Color ovalColor,String imageFormat,String toPath) throws IOException{  
            FileOutputStream fos = null;  
            try {  
                //获取源图片   
                BufferedImage image = ImageIO.read(new File(srcImagePath));  
                //根据xy点坐标绘制连接线   
                Graphics2D g2d = image.createGraphics();  
                g2d.setColor(ovalColor);  
                //填充一个椭圆形   
                g2d.fillOval(x, y, width, height);  
                fos = new FileOutputStream(toPath);  
                ImageIO.write(image, imageFormat, fos);   
            } catch (IOException e) {  
                e.printStackTrace();  
            }finally{  
                if(fos!=null){  
                    fos.close();  
                }  
            }  
        }  
          
        /** 
         * 画一组(多个)点---- 实际上是画一组(多个)填充颜色的圆 
         * ---- 以指定点坐标为中心画一个小半径的圆形,并填充其颜色来充当点 
         * @param srcImagePath  原图片路径 
         * @param pointList 点列表 
         * @param width 宽度 
         * @param height        高度 
         * @param ovalColor 填充颜色 
         * @param imageFormat   写入图片颜色 
         * @param toPath    写入路径 
         * @throws IOException 
         */  
        public void drawPoints(String srcImagePath,List pointList,int width,int height,Color ovalColor,String imageFormat,String toPath) throws IOException{  
            FileOutputStream fos = null;  
            try {  
                //获取源图片   
                BufferedImage image = ImageIO.read(new File(srcImagePath));  
                //根据xy点坐标绘制连接线   
                Graphics2D g2d = image.createGraphics();  
                g2d.setColor(ovalColor);  
                //填充一个椭圆形   
                if(pointList != null){  
                    for(int i=0;i<pointList.size();i++){  
                        Point point = (Point)pointList.get(i);  
                        int x = (int) point.getX();  
                        int y = (int) point.getY();  
                        g2d.fillOval(x, y, width, height);  
                    }  
                }  
                fos = new FileOutputStream(toPath);  
                ImageIO.write(image, imageFormat, fos);   
            } catch (IOException e) {  
                e.printStackTrace();  
            }finally{  
                if(fos!=null){  
                    fos.close();  
                }  
            }  
        }  
          
        /** 
         * 画线段 
         * @param srcImagePath  源图片路径 
         * @param x1    第一个点x坐标 
         * @param y1    第一个点y坐标 
         * @param x2    第二个点x坐标 
         * @param y2    第二个点y坐标 
         * @param lineColor 线条颜色 
         * @param toPath    图像写入路径 
         * @param imageFormat   图像写入格式 
         * @throws IOException   
         */  
        public void drawLine(String srcImagePath,int x1,int y1,int x2,int y2, Color lineColor,String toPath,String imageFormat) throws IOException{  
            FileOutputStream fos = null;  
            try {  
                //获取源图片   
                BufferedImage image = ImageIO.read(new File(srcImagePath));  
                //根据xy点坐标绘制连接线   
                Graphics2D g2d = image.createGraphics();  
                g2d.setColor(lineColor);  
                g2d.drawLine( x1, y1, x2, y2);  
                fos = new FileOutputStream(toPath);  
                ImageIO.write(image, imageFormat, fos);   
            } catch (IOException e) {  
                e.printStackTrace();  
            }finally{  
                if(fos!=null){  
                    fos.close();  
                }  
            }  
        }  
          
        /** 
         * 画折线 / 线段 
         * ---- 2个点即画线段,多个点画折线 
         * @param srcImagePath  源图片路径 
         * @param xPoints   x坐标数组 
         * @param yPoints   y坐标数组 
         * @param nPoints   点的数量 
         * @param lineColor 线条颜色 
         * @param toPath    图像写入路径 
         * @param imageFormat   图片写入格式 
         * @throws IOException   
         */  
        public void drawPolyline(String srcImagePath,int[] xPoints, int[] yPoints, int nPoints,Color lineColor,String toPath,String imageFormat) throws IOException{  
            FileOutputStream fos = null;  
            try {  
                //获取源图片   
                BufferedImage image = ImageIO.read(new File(srcImagePath));  
                //根据xy点坐标绘制连接线   
                Graphics2D g2d = image.createGraphics();  
                //设置线条颜色   
                g2d.setColor(lineColor);  
                g2d.drawPolyline(xPoints, yPoints, nPoints);  
                //图像写出路径   
                fos = new FileOutputStream(toPath);  
                ImageIO.write(image, imageFormat, fos);   
            } catch (IOException e) {  
                e.printStackTrace();  
            }finally{  
                if(fos!=null){  
                    fos.close();  
                }  
            }  
        }  
          
        /** 
         * 绘制折线,并突出显示转折点 
         * @param srcImagePath  源图片路径 
         * @param xPoints   x坐标数组 
         * @param yPoints   y坐标数组 
         * @param nPoints   点的数量 
         * @param lineColor 连线颜色 
         * @param width 点的宽度 
         * @param height        点的高度 
         * @param ovalColor 点的填充颜色 
         * @param toPath    图像写入路径 
         * @param imageFormat   图像写入格式 
         * @throws IOException 
         */  
        public void drawPolylineShowPoints(String srcImagePath,int[] xPoints, int[] yPoints, int nPoints,Color lineColor,int width,int height,Color ovalColor,String toPath,String imageFormat) throws IOException{  
            FileOutputStream fos = null;  
            try {  
                //获取源图片   
                BufferedImage image = ImageIO.read(new File(srcImagePath));  
                //根据xy点坐标绘制连接线   
                Graphics2D g2d = image.createGraphics();  
                //设置线条颜色   
                g2d.setColor(lineColor);  
                //画线条   
                g2d.drawPolyline(xPoints, yPoints, nPoints);  
                //设置圆点颜色   
                g2d.setColor(ovalColor);  
                //画圆点   
                if(xPoints != null){  
                    for(int i=0;i<xPoints.length;i++){  
                        int x = xPoints[i];  
                        int y = yPoints[i];  
                        g2d.fillOval(x, y, width, height);  
                    }  
                }  
                //图像写出路径   
                fos = new FileOutputStream(toPath);  
                ImageIO.write(image, imageFormat, fos);   
            } catch (IOException e) {  
                e.printStackTrace();  
            }finally{  
                if(fos!=null){  
                    fos.close();  
                }  
            }  
        }  
          
          
        /**  
         * 绘制一个由 x 和 y 坐标数组定义的闭合多边形 
         * @param srcImagePath 源图片路径 
         * @param xPoints   x坐标数组 
         * @param yPoints   y坐标数组 
         * @param nPoints   坐标点的个数 
         * @param polygonColor  线条颜色 
         * @param imageFormat   图像写入格式 
         * @param toPath    图像写入路径 
         * @throws IOException  
         */  
        public void drawPolygon(String srcImagePath,int[] xPoints,int[] yPoints,int nPoints,Color polygonColor,String imageFormat,String toPath) throws IOException {  
            FileOutputStream fos = null;  
            try {  
                //获取图片   
                BufferedImage image = ImageIO.read(new File(srcImagePath));  
                //根据xy点坐标绘制闭合多边形   
                Graphics2D g2d = image.createGraphics();  
                g2d.setColor(polygonColor);  
                g2d.drawPolygon(xPoints, yPoints, nPoints);  
                fos = new FileOutputStream(toPath);  
                ImageIO.write(image, imageFormat, fos);   
                g2d.dispose();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }finally{  
                        if(fos!=null){  
                            fos.close();  
                        }   
                }  
        }  
          
        /** 
         * 绘制并填充多边形 
         * @param srcImagePath  源图像路径 
         * @param xPoints   x坐标数组 
         * @param yPoints   y坐标数组 
         * @param nPoints   坐标点个数 
         * @param polygonColor  多边形填充颜色 
         * @param alpha 多边形部分透明度 
         * @param imageFormat   写入图形格式 
         * @param toPath    写入图形路径 
         * @throws IOException 
         */  
        public void drawAndAlphaPolygon(String srcImagePath,int[] xPoints,int[] yPoints,int nPoints,Color polygonColor,float alpha,String imageFormat,String toPath) throws IOException{  
            FileOutputStream fos = null;  
            try {  
                //获取图片   
                BufferedImage image = ImageIO.read(new File(srcImagePath));  
                //根据xy点坐标绘制闭合多边形   
                Graphics2D g2d = image.createGraphics();  
                g2d.setColor(polygonColor);  
                //设置透明度   
                AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);  
                g2d.setComposite(ac);  
                g2d.fillPolygon(xPoints, yPoints, nPoints);  
                fos = new FileOutputStream(toPath);  
                ImageIO.write(image, imageFormat, fos);   
                g2d.dispose();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }finally{  
                        if(fos!=null){  
                            fos.close();  
                        }   
                }  
        }  
          
          
        public static void main(String[] args)throws Exception{  
            OperateImage imageObj = new OperateImage();  
              
            /*String srcPath = "D:/test/fileSource/004.jpg"; 
            String toPath = "D:/test/desk/+e004.jpg"; 
            int x = 200; 
            int y = 300; 
            int width = 300; 
            int height = 200 ; 
            String readImageFormat = "jpg"; 
            String writeImageFormat = "jpg"*/;  
            //imageObj.cropImage(srcPath, toPath, x, y, width, height,readImageFormat,writeImageFormat);//剪切图片   
            //imageObj.resizeImage(srcPath, toPath, 400, 400);//按指定的长宽重置图形大小   
           //imageObj.reduceImageByRatio(srcPath, toPath, 3, 3);//按指定长和宽的比例缩小图形   
           //imageObj.enlargementImageByRatio(srcPath, toPath, 2, 2);//按指定长和宽的比例放大图形   
           //imageObj.reduceImageEqualProportion(srcPath, toPath, 4);//长高等比例缩小   
            //imageObj.enlargementImageEqualProportion(srcPath, toPath, 2);//长高等比例放大   
           /* String negativeImagePath = "D:/test/fileSource/004.jpg"; 
            String additionImagePath = "D:/test/fileSource/005.jpg"; 
            int x = 200; 
            int y = 200; 
            String toPath = "D:/test/desk/004+005-rightcenter.jpg";*/  
            //imageObj.mergeBothImage(negativeImagePath, additionImagePath, x, y, toPath); //按指定坐标合并图片   
            //imageObj.mergeBothImageTopleftcorner(negativeImagePath, additionImagePath, toPath);//合并到左上角   
            //imageObj.mergeBothImageToprightcorner(negativeImagePath, additionImagePath, toPath);//合并到右上角   
            //imageObj.mergeBothImageLeftbottom(negativeImagePath, additionImagePath, toPath);//合并到左下角   
            //imageObj.mergeBothImageRightbottom(negativeImagePath, additionImagePath, toPath);//合并到右下角   
            //imageObj.mergeBothImageCenter(negativeImagePath, additionImagePath, toPath);//合并到正中央   
            //imageObj.mergeBothImageTopcenter(negativeImagePath, additionImagePath, toPath);//合并到上边中央   
            //imageObj.mergeBothImageBottomcenter(negativeImagePath, additionImagePath, toPath);//合并到下边中央   
            //imageObj.mergeBothImageLeftcenter(negativeImagePath, additionImagePath, toPath);//合并到左边中央   
            //imageObj.mergeBothImageRightcenter(negativeImagePath, additionImagePath, toPath);//合并到右边中央   
              
            /* 
            String srcImage = "D:/test/fileSource/001.jpg"; 
            String toPath = "D:/test/desk/001-gray.jpg"; 
            String imageFormat = "jpg"; 
            imageObj.grayImage(srcImage, toPath, imageFormat);//图片灰化 
             */      
              
            /* 
            String firstSrcImagePath = "D:/test/desk/003.jpg"; 
            String secondSrcImagePath = "D:/test/desk/004.jpg"; 
            String imageFormat = "jpg"; 
            String toPath = "D:/test/desk/003-004-join.jpg"; 
            imageObj.joinImagesHorizontal(firstSrcImagePath, secondSrcImagePath, imageFormat, toPath);//横向拼接图片 
            */  
              
            /* 
            String firstSrcImagePath = "D:/test/desk/001-002-join.jpg"; 
            String secondSrcImagePath = "D:/test/desk/003-004-join.jpg"; 
            String imageFormat = "jpg"; 
            String toPath = "D:/test/desk/all-join.jpg"; 
            imageObj.joinImagesVertical(firstSrcImagePath, secondSrcImagePath, imageFormat, toPath);//纵向拼接图片 
            */  
              
            /*String srcImagePath = "D:/test/fileSource/002.jpg"; 
            int[] xPoints = {20,100,160,270,500};  
            int[] yPoints = {30,150,172,295,615}; 
            int nPoints = 5;  
            String toPath = "D:/test/desk/polygon-002.png"; 
            imageObj.drawPolygon(srcImagePath, xPoints, yPoints, nPoints, Color.MAGENTA, "jpg", toPath); //根据坐标数组绘制多边形 
            */  
      
            /*String srcImagePath = "D:/test/fileSource/004.jpg"; 
            String appendImagePath = "D:/test/fileSource/005.jpg"; 
            float alpha = 0.2F; 
            String  font = "宋体"; 
            int fontStyle = Font.PLAIN; 
            int fontSize = 32; 
            Color color = Color.RED; 
            String inputWords = "图片上设置水印文字 ---- 宋体 普通字体 32号字 红色 透明度0.5"; 
            int x = 20; 
            int y = 40; 
            String imageFormat = "jpg"; 
            String toPath = "D:/test/desk/alphaI2I-001.png";*/  
            //imageObj.alphaWords2Image(srcImagePath, alpha, font, fontStyle, fontSize, color, inputWords, x, y, imageFormat, toPath); //设置文字水印   
            //imageObj.alphaImage2Image(srcImagePath, appendImagePath, alpha, x, y, 300, 200, imageFormat, toPath);//设置图片水印   
              
            /* 
            String srcImagePath = "D:/test/fileSource/003.jpg"; 
            int[] xPoints = {100,150,200,240,300}; 
            int[] yPoints = {200,60,280,160,100}; 
            int nPoints = 5; 
            Color lineColor = Color.RED; 
            String toPath = "D:/test/desk/polyline-003.jpg"; 
            String imageFormat = "jpg"; 
            imageObj.drawPolyline(srcImagePath, xPoints, yPoints, nPoints, lineColor,toPath, imageFormat);//画折线 
             */       
              
            /* 
            int x1 = 50; 
            int y1 = 100; 
            int x2 = 600; 
            int y2 = 150; 
            Color lineColor = Color.BLUE; 
            imageObj.drawLine(srcImagePath, x1, y1, x2, y2, lineColor,toPath, imageFormat);//画线段 
             */       
              
            /* 
            String srcImagePath = "D:/test/fileSource/002.jpg"; 
            int x = 400; 
            int y = 500; 
            int width = 10; 
            int height = 10; 
            Color ovalColor = Color.RED; 
            String imageFormat = "jpg"; 
            String toPath = "D:/test/desk/point-002.jpg"; 
            imageObj.drawPoint(srcImagePath, x, y, width, height, ovalColor, imageFormat, toPath);//画一个圆点 
            */  
              
            /*List pointList = new ArrayList(); 
            Point p1 = new Point(60,80); 
            pointList.add(p1); 
            Point p2 = new Point(160,80); 
            pointList.add(p2); 
            Point p3 = new Point(60,180); 
            pointList.add(p3); 
            Point p4 = new Point(260,180); 
            pointList.add(p4); 
            Point p5 = new Point(460,380); 
            pointList.add(p5); 
            String srcImagePath = "D:/test/fileSource/004.jpg"; 
            int width = 10; 
            int height = 10; 
            Color ovalColor = Color.RED; 
            String imageFormat = "jpg"; 
            String toPath = "D:/test/desk/points-004.jpg"; 
            imageObj.drawPoints(srcImagePath, pointList, width, height, ovalColor, imageFormat, toPath);//画出一组(多个)点 
             */     
              
            /* 
            int[] xPoints = {50,100,180,400,600}; 
            int[] yPoints = {200,100,160,300,640}; 
            int nPoints = 5; 
            Color lineColor = Color.PINK; 
            String srcImagePath = "D:/test/fileSource/003.jpg"; 
            String toPath = "D:/test/desk/showpoints-003.jpg"; 
            imageObj.drawPolylineShowPoints(srcImagePath, xPoints, yPoints, nPoints, lineColor, width, height, ovalColor, toPath, imageFormat);//画折线并突出显示点 
             */     
              
            /* 
            String srcImagePath ="D:/test/fileSource/004.jpg";  
            int[] xPoints ={50,90,180,320,640}; 
            int[] yPoints ={200,300,120,240,360}; 
            int nPoints = 5; 
            Color polygonColor = Color.PINK; 
            float alpha = (float) 0.2; 
            String imageFormat ="jpg"; 
            String toPath ="D:/test/desk/drawalpha-004.jpg"; 
            imageObj.drawAndAlphaPolygon(srcImagePath, xPoints, yPoints, nPoints, polygonColor, alpha, imageFormat, toPath); 
            */  
            /* 
            String negativeImagePath = "D:/test/fileSource/001.jpg"; 
            String additionImagePath = "D:/test/fileSource/006.png"; 
            String  toPath = "D:/test/fileSource/001.jpg"; 
            long start = System.currentTimeMillis(); 
            for(int i=0;i<1000;i++){ 
                Random rand = new Random(); 
                int x = rand.nextInt(1024); 
                int y =  rand.nextInt(768); 
                imageObj.mergeBothImage(negativeImagePath, additionImagePath, x, y, toPath);//每次附加合并一张图片(循环若干次) 
            } 
            long end = System.currentTimeMillis(); 
            System.out.println(end-start);*/  
            //100 -- 45844   
            //1000 -- 411156   
            /*改进思路:将mergeBothImage方法 修改为mergeImageList方法, 
            通过将图片的坐标点装入list容器,然后再取出一来在方法中一次性与图片合并, 
            不再每次都打开底图、保存合成图片,关闭流*/  
      
            //叠加组合图像   
            /*String negativeImagePath = "D:/test/fileSource/001.jpg"; 
            String  toPath = "D:/test/fileSource/001.jpg"; 
            String additionImagePath = "D:/test/fileSource/007.png"; 
            List additionImageList = new ArrayList(); 
            int count = 0; 
            for(int i=0;i<100;i++){//为什么总是连续生成一样的随机数??? 
                Random rand = new Random(); 
                int x = rand.nextInt(1020); 
                String xStr = x+""; 
                int y =  rand.nextInt(760); 
                String yStr = y +""; 
                String[] str = {xStr,yStr,additionImagePath}; 
                additionImageList.add(str); 
                count++; 
                //System.out.println(xStr+"   :     "+yStr); 
            } 
            System.out.println(count); 
            long start = System.currentTimeMillis(); 
            imageObj.mergeImageList(negativeImagePath, additionImageList,"jpg", toPath); 
            long end = System.currentTimeMillis(); 
            System.out.println(end-start);*/  
            //                                第一次        第二次      第三次   
            //100张耗时(毫秒)        --2003          1792            1869           1747         1871            1793   
            //1000张耗时(毫秒)   --15334         15200       15236         15903         16028       15545   
            //10000张耗时(毫秒)  --153010        153340      152673       154978         156506      154854                                  
            //如果list.size()<=100,则调用此方法,   
            //如果list.size()>100,则调用Jmagick的方法。   
              
            /*List iamgePathList = new ArrayList();     // D:/test/16a/ 
            iamgePathList.add("D:/test/16a/12384_2492.jpg"); 
            iamgePathList.add("D:/test/16a/12384_2493.jpg"); 
            iamgePathList.add("D:/test/16a/12384_2494.jpg"); 
            iamgePathList.add("D:/test/16a/12384_2495.jpg"); 
            iamgePathList.add("D:/test/16a/12384_2496.jpg"); 
            iamgePathList.add("D:/test/16a/12384_2497.jpg"); 
            iamgePathList.add("D:/test/16a/12384_2498.jpg"); 
            iamgePathList.add("D:/test/16a/12384_2499.jpg"); 
            iamgePathList.add("D:/test/16a/12384_2500.jpg"); 
            iamgePathList.add("D:/test/16a/12384_2501.jpg"); 
            iamgePathList.add("D:/test/16a/12384_2502.jpg");*/  
            //String imageFormat = "jpg";   
            //String toPath = "D:/test/desk/16a_v1.jpg";   
            //imageObj.joinImageListHorizontal(iamgePathList, imageFormat, toPath);   
              
            /*String imageFormat = "jpg"; 
            String[] pics1 = {"D:/test/16a/12384_2502.jpg","D:/test/16a/12384_2501.jpg", 
                    "D:/test/16a/12384_2500.jpg","D:/test/16a/12384_2499.jpg","D:/test/16a/12384_2498.jpg", 
                    "D:/test/16a/12384_2497.jpg","D:/test/16a/12384_2496.jpg","D:/test/16a/12384_2495.jpg", 
                    "D:/test/16a/12384_2494.jpg","D:/test/16a/12384_2493.jpg","D:/test/16a/12384_2492.jpg"}; 
             
            String[] pics2 = {"D:/test/16a/12385_2502.jpg","D:/test/16a/12385_2501.jpg", 
                    "D:/test/16a/12385_2500.jpg","D:/test/16a/12385_2499.jpg","D:/test/16a/12385_2498.jpg", 
                    "D:/test/16a/12385_2497.jpg","D:/test/16a/12385_2496.jpg","D:/test/16a/12385_2495.jpg", 
                    "D:/test/16a/12385_2494.jpg","D:/test/16a/12385_2493.jpg","D:/test/16a/12385_2492.jpg"}; 
             
            String[] pics3 = {"D:/test/16a/12386_2502.jpg","D:/test/16a/12386_2501.jpg", 
                    "D:/test/16a/12386_2500.jpg","D:/test/16a/12386_2499.jpg","D:/test/16a/12386_2498.jpg", 
                    "D:/test/16a/12386_2497.jpg","D:/test/16a/12386_2496.jpg","D:/test/16a/12386_2495.jpg", 
                    "D:/test/16a/12386_2494.jpg","D:/test/16a/12386_2493.jpg","D:/test/16a/12386_2492.jpg"}; 
             
            String[] pics4 = {"D:/test/16a/12387_2502.jpg","D:/test/16a/12387_2501.jpg", 
                    "D:/test/16a/12387_2500.jpg","D:/test/16a/12387_2499.jpg","D:/test/16a/12387_2498.jpg", 
                    "D:/test/16a/12387_2497.jpg","D:/test/16a/12387_2496.jpg","D:/test/16a/12387_2495.jpg", 
                    "D:/test/16a/12387_2494.jpg","D:/test/16a/12387_2493.jpg","D:/test/16a/12387_2492.jpg"}; 
             
            String[] pics5 = {"D:/test/16a/12388_2502.jpg","D:/test/16a/12388_2501.jpg", 
                    "D:/test/16a/12388_2500.jpg","D:/test/16a/12388_2499.jpg","D:/test/16a/12388_2498.jpg", 
                    "D:/test/16a/12388_2497.jpg","D:/test/16a/12388_2496.jpg","D:/test/16a/12388_2495.jpg", 
                    "D:/test/16a/12388_2494.jpg","D:/test/16a/12388_2493.jpg","D:/test/16a/12388_2492.jpg"}; 
             
            String[] pics6 = {"D:/test/16a/12389_2502.jpg","D:/test/16a/12389_2501.jpg", 
                    "D:/test/16a/12389_2500.jpg","D:/test/16a/12389_2499.jpg","D:/test/16a/12389_2498.jpg", 
                    "D:/test/16a/12389_2497.jpg","D:/test/16a/12389_2496.jpg","D:/test/16a/12389_2495.jpg", 
                    "D:/test/16a/12389_2494.jpg","D:/test/16a/12389_2493.jpg","D:/test/16a/12389_2492.jpg"}; 
             
            String toPath1 = "D:/test/desk/16a_v1.jpg"; 
            String toPath2 = "D:/test/desk/16a_v2.jpg"; 
            String toPath3 = "D:/test/desk/16a_v3.jpg"; 
            String toPath4 = "D:/test/desk/16a_v4.jpg"; 
            String toPath5 = "D:/test/desk/16a_v5.jpg"; 
            String toPath6 = "D:/test/desk/16a_v6.jpg"; 
             
            String[] pics7 = {toPath1,toPath2,toPath3,toPath4,toPath5,toPath6}; 
            String toPath7 = "D:/test/desk/16a_h1.jpg"; 
             
            long start = System.currentTimeMillis(); 
            imageObj.joinImageListVertical(pics1, imageFormat, toPath1); 
            imageObj.joinImageListVertical(pics2, imageFormat, toPath2); 
            imageObj.joinImageListVertical(pics3, imageFormat, toPath3); 
            imageObj.joinImageListVertical(pics4, imageFormat, toPath4); 
            imageObj.joinImageListVertical(pics5, imageFormat, toPath5); 
            imageObj.joinImageListVertical(pics6, imageFormat, toPath6); 
             
            imageObj.joinImageListHorizontal(pics7, imageFormat, toPath7); 
            long end = System.currentTimeMillis(); 
            System.out.println(end-start);*/  
              
            String str = "北京\n上海\n广州\n深圳";  
            System.out.println(str);  
            String path = "c:/relevantdata.txt";  
            FileOutputStream fops = new FileOutputStream(path);  
            fops.write(str.getBytes());  
              
            BufferedReader inputStream = new BufferedReader(new FileReader(new File(path)));  
            String mrMsg = "";  
            while((mrMsg = inputStream.readLine())!=null){  
            System.out.println(mrMsg);  
            }  
            }  
            //数量        11          11x6   
            //纵向        375        
            //横向        391     3250   
    }  

 

分享到:
评论

相关推荐

    Java图片处理ImageIO.read()问题

    在Java编程中,图片处理是一项常见的任务,而`ImageIO`类是Java标准库提供用于读取、写入和操作图像的重要工具。本篇将详细探讨`ImageIO.read()`方法的相关知识点,以及如何解决可能遇到的问题。 `ImageIO`类位于`...

    TwelveMonkeysImageIO:JavaImageIO的一个插件和扩展集合

    在Java开发领域,图像处理是一项不可或缺的任务,而Java自带的ImageIO类库虽然基础功能完备,但在处理某些特定格式或者需要高级功能时,其能力显得较为有限。此时,第三方库如TwelveMonkeys ImageIO就显得尤为重要。...

    javaImageIo实现图片内容动态修改

    javaImageIo实现图片内容动态修改

    图片ImageIO操作工具类

    关于图片ImageIO操作工具类 java程序ImageIO处理图像的封装

    java 图片压缩 iphone拍照上传旋转问题处理压缩工具类

    在Java开发中,处理图像尤其是来自移动设备如iPhone的照片时,常常会遇到一些特定的问题,例如照片上传时的旋转问题。这是因为iOS设备在拍摄照片时可能会记录照片的元数据(Exif信息),其中包括照片的旋转角度,这...

    详解Java中使用ImageIO类对图片进行压缩的方法

    在Java中,对图片进行压缩和处理是一项常见的任务,特别是在开发涉及到图像上传、展示或者存储的应用程序时。`ImageIO` 类是Java标准库中用于读取、写入和处理图像的重要工具,它提供了灵活且高效的图像处理功能。...

    图片处理 javax.imageio.IIOException: Unsupported Image Type

    在Java编程环境中,图片处理是一项常见的任务,但有时可能会遇到“javax.imageio.IIOException: Unsupported Image Type”的错误。这个异常通常表示Java的`ImageIO`类库无法识别或支持所尝试读取或写入的图像格式。...

    java图像处理 java图像处理java图像处理

    Java图像处理主要涉及Java Advanced Imaging (JAI) API和Java Image I/O (JIO) API。JAI API是Sun Microsystems开发的一个高级图像处理工具,它作为Java Media Framework的一部分,为Java 2D API提供了扩展,专门...

    mst.zip_java 图像处理_java图像处理_图像处理_图像处理 java

    首先,Java提供了丰富的图像处理API,主要集中在`java.awt.image`和`javax.imageio`这两个包中。`java.awt.image`包包含了用于创建、修改和显示图像的各种类,如BufferedImage、Graphics2D等。而`javax.imageio`则...

    java处理图片背景颜色的方法

    在标签中,作者列出了四个关键词:“java 处理图片背景颜色”、“java 图片背景颜色替换”、“java 图片背景颜色更改”、“java 蓝底寸照批量转换为白底”,这些关键词都与 Java 处理图片背景颜色相关。 在部分内容...

    java图像处理源代码

    Java在图像处理方面主要依赖于`java.awt.image`和`javax.imageio`这两个包,它们提供了基本的图像读取、写入、显示以及处理功能。`java.awt.image.BufferedImage`类是处理图像的核心,它允许我们创建、修改和保存...

    Java识别图片文字相关jar包 jai_imageio-1.1.1+swingx-1.6.1+ocr-1.11

    总结来说,"Java识别图片文字相关jar包 jai_imageio-1.1.1+swingx-1.6.1+ocr-1.11"提供了Java环境下实现OCR功能的基本工具,包括图像处理、用户界面构建和文本识别。开发者可以利用这些库开发出功能完善的OCR应用...

    图像识别与处理Java代码.rar_java 图像处理_java图像处理_java图像识别_java源代码_图像识别

    1. **Java图像处理**:Java标准库中的`java.awt.image`和`javax.imageio`包提供了基本的图像处理功能。例如,`BufferedImage`类用于创建和操作图像,`Graphics2D`允许在图像上绘制和修改元素。此外,`ImageIO`类提供...

    java 图片转webp格式代码,maven项目

    本项目主要涉及的是如何在Java环境中将图片转换为WebP格式,这是一种由Google开发的高效图像文件格式,旨在提供更好的压缩效率,同时保持图像质量。下面我们将深入探讨这个Java Maven项目中的关键技术点。 首先,...

    java图像处理

    2. **ImageIO类**: `javax.imageio.ImageIO` 类是Java中处理图像的核心工具,它提供了读取、写入和转换多种图像格式(如JPEG、PNG、GIF)的能力。例如,使用 `ImageIO.read()` 方法可以读取一个图像文件,`ImageIO....

    java图片处理类-java课程设计

    Java图片处理类是Java编程语言中用于操作和处理图像文件的核心技术,主要涉及Java的AWT(Abstract Window Toolkit)和Swing库。在Java课程设计中,学生通常会被要求掌握这些概念并应用到实际项目中,例如创建一个...

    java处理图片大小等比例缩放,自定义修改图片大小,截取,水印

    在Java中,我们可以使用`java.awt.image.BufferedImage`类来处理图像。为了等比例缩放图片,我们需要获取原始图片的宽高比,然后根据目标尺寸计算出新的宽高。关键代码可能如下: ```java BufferedImage source =...

    Java图像处理与编程

    Java图像处理可以使用Java的图像处理类库,例如BufferedImage类、ImageIO类等。也可以使用OpenCV库,OpenCV库是一个开源的计算机视觉库,提供了图像处理、物体检测、人脸识别等功能。 6. Java图像处理的实例 下面...

    java imageProcess 图像处理程序模板

    在Java中,处理图像主要依赖于`java.awt`和`javax.imageio`这两个包。`java.awt`提供了基本的图形绘制和颜色处理功能,而`javax.imageio`则用于图像的输入/输出操作。下面,我们将深入探讨Java图像处理的一些关键...

    java编写的图像处理程序,java做图像处理,Java

    在Java中,我们可以使用内置的`java.awt.image`和`javax.imageio`包来处理图像。这两个包提供了基础的图像处理功能,如读取、写入、显示和修改图像。`BufferedImage`类是Java中处理图像的主要类,它可以存储和操作...

Global site tag (gtag.js) - Google Analytics