2011-06-17 22 views
10

Javaプログラムを使用して、画像のサイズ(幅と高さではない)を小さくする必要があります。 いいAPI​​がありますか?Javaの画像解像度を下げる

サイズを1MBから約50kb - 100 kbに縮小する必要があります。 もちろん、解像度は低下しますが、それは問題ではありません。

+2

解像度を上げることについての質問よりも優れています... –

+0

問題解決済み!!私の答えをチェックしてください。 –

答えて

6

これは、このコードは私のために働い偉大である作業コード

public class ImageCompressor { 
    public void compress() throws IOException { 
     File infile = new File("Y:\\img\\star.jpg"); 
     File outfile = new File("Y:\\img\\star_compressed.jpg"); 

     BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
       infile)); 
     BufferedOutputStream bos = new BufferedOutputStream(
       new FileOutputStream(outfile)); 

     SeekableStream s = SeekableStream.wrapInputStream(bis, true); 

     RenderedOp image = JAI.create("stream", s); 
     ((OpImage) image.getRendering()).setTileCache(null); 

     RenderingHints qualityHints = new RenderingHints(
       RenderingHints.KEY_RENDERING, 
       RenderingHints.VALUE_RENDER_QUALITY); 

     RenderedOp resizedImage = JAI.create("SubsampleAverage", image, 0.9, 
       0.9, qualityHints); 

     JAI.create("encode", resizedImage, bos, "JPEG", null); 

    } 

    public static void main(String[] args) throws IOException { 

     new ImageCompressor().compress(); 
    } 
} 

です。画像のサイズを変更する必要がある場合は ここでxとyのスケールを変更することができますJAI.create("SubsampleAverage", image, xscale,yscale, qualityHints);

+0

偉大な答え若い男。しかし、私はこのイメージのdpiレベルを上げることができますか?これを行う方法はありますか? – Buntylm

+0

@BuntyMadanこれを参照してください:http://stackoverflow.com/a/14050844/235710 –

9

このブログの投稿によれば、http://i-proving.com/2006/07/06/java-advanced-imaging/には、Java Advanced Imaging Libraryを使用して必要な処理を行うことができます。次のサンプルコードを参考にしてください。これにより、画像の高さと幅、画像のサイズが変更されます。画像が希望のファイルサイズになったら、画像を表示するときに希望のピクセルの高さと幅に戻して拡大縮小することができます。

// read in the original image from an input stream 
SeekableStream s = SeekableStream.wrapInputStream(
    inputStream, true); 
RenderedOp image = JAI.create("stream", s); 
((OpImage)image.getRendering()).setTileCache(null); 

// now resize the image 

float scale = newWidth/image.getWidth(); 

RenderedOp resizedImage = JAI.create("SubsampleAverage", 
    image, scale, scale, qualityHints); 


// lastly, write the newly-resized image to an 
// output stream, in a specific encoding 

JAI.create("encode", resizedImage, outputStream, "PNG", null); 
0

イメージタイプがImageWriteParamの実装でサポートされている場合は、exampleのように品質を調整できます。他のImageWriteParamメソッド(getBitRate()など)では、結果を最適化できます。

+0

私はその例を試してみて、うまくいきませんでした。 1.0fを除いてfloat値を渡すと、さらに大きな画像サイズが作成されます。私が1.0fを通過すると、サイズの小さいファイルを作成していますが、品質は低いです。または、イメージが単に失われていると言うことができます。 –

+0

使用可能な品質の説明と値を確認することができます。意味は形式によって異なります。あなたはどんなフォーマットを使っていますか? – trashgod

関連する問題