二つの画像を縮小している、ここにあなたがそれを行うだろう方法は次のとおりです。
BufferedImage original = //your image here
scaled = original.getScaledInstance(finalWidth, finalHeight, Image.SCALE_SMOOTH); // scale the image to a smaller one
BufferedImage result = new BufferedImage(finalWidth, finalHeight, original.getType());
Graphics2D g = result.createGraphics();
g.drawImage(scaled, 0, 0, null); //draw the smaller image
g.dispose();
を明らかに画像が同じでとどまるので、あなたは、スケールの幅と高さを計算する必要がありますアスペクト比。
あなたはそれを小さく描かれていたら、あなたは今、JPEGファイルにこのイメージを変えることができます:
BufferedImage image = // this is the final scaled down image
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(output);
JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
jpegEncodeParam.setXDensity(92);
jpegEncodeParam.setYDensity(92);
jpegEncodeParam.setQuality(0.8F , false);
jpegEncoder.encode(image, jpegEncodeParam);
これらのクラスは、JAIパッケージ(より正確にcom.sun.image.codecからです。 jpeg)、JVMは直接使用すべきではないと訴えるかもしれませんが、無視することができます。
hereからJAIをダウンロードすることはできますが、動作しない場合は、2つのライブラリ用にgithubミラーを設定するJAI coreとJAI ImageIOがあります。
こんにちは、どのような影響(視覚的に)は、JPEGの圧縮を変更しますか?ありがとう – Joeblackdev
このポストhttp://www.codinghorrorを見てください。com/blog/2006/07/a-comparison-of-jpeg-compression-levels-and-recompression.html –
リンクをいただきありがとうございます。しかし、jpegの色数を減らす方法があるかどうか疑問に思っていましたか?たとえば、16ビットカラーの代わりに8ビットカラーを使用するには?ありがとう – Joeblackdev