2017-05-18 9 views
0

サイズを小さくするためにpngイメージ(6.8 MB)を圧縮しようとしていますが、私はそのキルトの多くを失っているという問題に直面しています。私がこれらの行にコメントしても、イメージを圧縮するときに正しい値をsetCompressionQuality()に設定します。

 param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
     param.setCompressionQuality(0.9f); 

私はスクリーンショットのように画像を取得していますが、サイズは(812 KB)です。ラインで私は(1.24 MB)のサイズのPNG画像を取得していますが、両方のケースでは、 の違いなしで(黒い背景でも)スクリーンショットのようにイメージを取得しています。どのようにしてより良いキルトでイメージを圧縮できますか?また、私は、次のsetCompressionQuality(0.9f)として0-1の間の浮動小数点値を設定することによって、品質vlaueを構成できると考えました。

package ImageCompressor; 

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Iterator; 

import javax.imageio.IIOImage; 
import javax.imageio.ImageIO; 
import javax.imageio.ImageWriteParam; 
import javax.imageio.ImageWriter; 
import javax.imageio.stream.ImageOutputStream; 


public class ImageComprossor { 

    public static void main(String[] args) { 
     BufferedImage img = null; 
     try { 

      File input = new File("strawberry.png"); 
      BufferedImage image = ImageIO.read(input); 

      File compressedImageFile = new File("strawberry_compressed.png"); 
      OutputStream os = new FileOutputStream(compressedImageFile); 

      Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg"); 
      ImageWriter writer = writers.next(); 

      ImageOutputStream ios = ImageIO.createImageOutputStream(os); 
      writer.setOutput(ios); 

      ImageWriteParam param = writer.getDefaultWriteParam(); 
      // Check if canWriteCompressed is true 
      if (param.canWriteCompressed()) { 
       param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
       param.setCompressionQuality(0.9f); 
      } 
      // End of check 
      writer.write(null, new IIOImage(image, null, null), param); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

スクリーンショット enter image description here

+0

なぜ 'ImageWriter'を取得するのに' jpg'を使用していますか? 'ImageIO.getImageWritersByFormatName(" png ")'に変更してから、利用可能な圧縮タイプ( 'param.getCompressionTypes()')を取得しようとすると、 'java.lang.UnsupportedOperationException:Compression not supported '。 –

答えて

0

私はこの方法getImageWritersByFormatName( "PNG")でPNG形式を設定する必要がありました。画像は同じだがより大きなサイズで表示されます - そのサイズは11.2MBです。

関連する問題