画像圧縮処理のいくつかの方法


画像圧縮のいくつかの方法
一、Thumbnailatorフレーム
Thumbnailator    Google       Java  
       :    ,    ,  ,  ,    。
Thumbnailator  :http://code.google.com/p/thumbnailator/
maven  
<dependency>
  <groupId>net.coobirdgroupId>
  <artifactId>thumbnailatorartifactId>
  <version>0.4.8version>
dependency>
    public static void main(String[] args) {
        //      outputStream
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        FileOutputStream outputStream1 = null;
        try {
            File file  =new File("  ");
            // ImageIO      BufferedImage  
            //BufferedImage       ,         
            //     http://blog.csdn.net/novaless/article/details/5954933
            BufferedImage image = ImageIO.read(file);
            //  Thumbnails  
            //scale(x) x>1     x<1   
            //toOutputStream   (toFile  file  ,           ,    )
             Thumbnails.of(image).scale(0.5f).outputFormat("jpg").toOutputStream(outputStream);
            //    
            outputStream1 = new FileOutputStream(new File("C:\\Users\\PC\\Desktop\\out.jpg"));
            outputStream.writeTo(outputStream1);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            IOUtils.closeQuietly(outputStream);
            IOUtils.closeQuietly(outputStream);
        }
    }
BufferImage.drawImage()
public static void main(String[] args) {=
   try {
       File file  =new File("C:\\Users\\PC\\Desktop\\timg.jpg");
       // ImageIO      BufferedImage  
       BufferedImage image = ImageIO.read(file);
       //       
       int width = (image.getWidth(null));
       int height = (image.getHeight(null));
       //      BufferedImage  
       BufferedImage newImage = new BufferedImage(width / 2,height / 2,BufferedImage.TYPE_INT_RGB);
        //       1/2    ,1/2         newImage.getGraphics().drawImage(image.getScaledInstance(width / 2,height / 2,BufferedImage.TYPE_INT_RGB), 0, 0, null);
        //    
      FileOutputStream outputStream = new FileOutputStream(new File("C:\\Users\\PC\\Desktop\\out.jpg"));
      //  
       ImageIO.write(newImage,"jpg",outputStream);
   } catch (IOException e) {
       e.printStackTrace();
   }
}
三、alibabababaのシンプルイメージ
サポート操作:JPEG復号強化(メモリリークなし、CMYK対応)、GIFアニメーションの読み込みと保存、画像の色空間変換、画像の高品質縮小、画像の透かし文字のソースアドレス:https://github.com/alibaba/simpleimage
maven  :
<dependency>
  <groupId>com.alibabagroupId>
  <artifactId>simpleimageartifactId>
  <version>1.2.3version>
dependency>
<dependency>
  <groupId>javax.mediagroupId>
  <artifactId>jai-coreartifactId>
  <version>1.1.3version>
dependency>
コード
 FileInputStream inputStream = null;
 FileOutputStream outputStream = null;
 ImageRender imageRender = null;
 try {
     //    
     inputStream = new FileInputStream(new File("C:\\Users\\PC\\Desktop\\timg.png"));
     //  BufferedImage,     
     BufferedImage image = ImageIO.read(inputStream);
     int width = image.getWidth();
     int height = image.getHeight();
     //      ImageRender
     ImageRender inImageRender = new ReadRender(inputStream);
     //      
     ScaleParameter scaleParameter = new ScaleParameter();
     scaleParameter.setMaxHeight(height / 2);
     scaleParameter.setMaxWidth(width / 2);
     ImageRender scaleImageRender = new ScaleRender(inImageRender, scaleParameter);
     outputStream = new FileOutputStream(new File("C:\\Users\\PC\\Desktop\\out.png"));
     //    ,   Jpg  
     imageRender = new WriteRender(scaleImageRender, outputStream,ImageFormat.PNG);
     imageRender.render();
 } catch (FileNotFoundException e) {
     e.printStackTrace();
 } catch (IOException e) {
     e.printStackTrace();
 } catch (SimpleImageException e) {
     e.printStackTrace();
 } finally {
     IOUtils.closeQuietly(inputStream);
     IOUtils.closeQuietly(outputStream);
     if (imageRender != null) {
         try {
             //  simpleImage     
             imageRender.dispose();
         } catch (SimpleImageException ignore) {
         }
     }
 }
四、ImageJフレーム
mageJ    ,  ,  ,  ,  ,  8 ,16 ,32    ,   TIFF, PNG, GIF, JPEG, BMP, DICOM, FITS     。ImageJ       ,                    ,     。      ,ImageJ             。         ,     ,  ,   ,      ,ImageJ              ,   ,    ,           ,       。
maven  :
<dependency>
  <groupId>gov.nih.imagejgroupId>
  <artifactId>imagejartifactId>
  <version>1.46version>
dependency>
コード:
public static void main(String[] args) {
try {
   // File file = new File("C:\\Users\\PC\\Desktop\\timg.png");
    ImagePlus imagePlus = IJ.openImage("C:\\Users\\PC\\Desktop\\timg2.png");
    //       O(∩_∩)O   ~
    //imagePlus.show();
    //     
    int width  = imagePlus.getWidth();
    int height = imagePlus.getHeight();
    ImageProcessor imageProcessor = imagePlus.getProcessor();
    //         
    imageProcessor.setInterpolate(true);
    //    
    ImageProcessor outImageProcessor = imageProcessor.resize(width / 10 ,height / 10);
    imagePlus.setProcessor(imagePlus.getTitle(),outImageProcessor);
    //      
    imagePlus.updateAndDraw();
    //    
    IJ.save(imagePlus,"C:\\Users\\PC\\Desktop\\timg3.png");
}catch (Exception e){
    e.getStackTrace();
}
}
五、Java image scaling
java-mage-scalingは、高品質の画像サムネイルを生成するために使用されてもよい。
mavenの配置:
<dependency>
  <groupId>com.mortennobelgroupId>
  <artifactId>java-image-scalingartifactId>
  <version>0.8.6version>
dependency>
コード:
public static void main(String[] args) {
   FileOutputStream fileOutputStream = null;
   try {
       File file = new File("C:\\Users\\PC\\Desktop\\timg.png");
       BufferedImage bufferedImage = ImageIO.read(file);
       int width = bufferedImage.getWidth();
       int height = bufferedImage.getHeight();
       //true --           (     false,      /(ㄒoㄒ)/~~)
       ResampleOp resampleOp = new ResampleOp(DimensionConstrain.createMaxDimension(width/ 2 , height / 2 ,true));
       BufferedImage scaleBufferedImage = resampleOp.filter(bufferedImage,null);
       fileOutputStream = new FileOutputStream(new File("C:\\Users\\PC\\Desktop\\timg4.jpg"));
       //  
       ImageIO.write(scaleBufferedImage,"jpg",fileOutputStream);
   } catch (IOException e) {
       e.printStackTrace();
   }

}
締め括りをつける
はい、ここまで書きます。この機能を実現するために多くの方法があります。参考にしてください。http://blog.csdn.net/it_man/articale/detail/760628