Javaプログラムを使用して、画像のサイズ(幅と高さではない)を小さくする必要があります。 いいAPIがありますか?Javaの画像解像度を下げる
サイズを1MBから約50kb - 100 kbに縮小する必要があります。 もちろん、解像度は低下しますが、それは問題ではありません。
Javaプログラムを使用して、画像のサイズ(幅と高さではない)を小さくする必要があります。 いいAPIがありますか?Javaの画像解像度を下げる
サイズを1MBから約50kb - 100 kbに縮小する必要があります。 もちろん、解像度は低下しますが、それは問題ではありません。
これは、このコードは私のために働い偉大である作業コード
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);
偉大な答え若い男。しかし、私はこのイメージのdpiレベルを上げることができますか?これを行う方法はありますか? – Buntylm
@BuntyMadanこれを参照してください:http://stackoverflow.com/a/14050844/235710 –
このブログの投稿によれば、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);
JAIを使用すると、スケーリングせずに書かれたJPEGの圧縮率を高めることができます。 http://java.sun.com/products/java-media/jai/forDevelopers/jai1_0_1guide-unc/Encode.doc.html
イメージタイプがImageWriteParam
の実装でサポートされている場合は、exampleのように品質を調整できます。他のImageWriteParam
メソッド(getBitRate()
など)では、結果を最適化できます。
私はその例を試してみて、うまくいきませんでした。 1.0fを除いてfloat値を渡すと、さらに大きな画像サイズが作成されます。私が1.0fを通過すると、サイズの小さいファイルを作成していますが、品質は低いです。または、イメージが単に失われていると言うことができます。 –
使用可能な品質の説明と値を確認することができます。意味は形式によって異なります。あなたはどんなフォーマットを使っていますか? – trashgod
解像度を上げることについての質問よりも優れています... –
問題解決済み!!私の答えをチェックしてください。 –