可能的解決方案中的兩個縮減圖像,這裏是你會怎麼做:
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。 jvg),JVM可能會抱怨說不應該直接使用它們,但是你可以忽略它。
您可以從here下載JAI,如果它不起作用我有github鏡像設置爲兩個庫,JAI core和JAI ImageIO。
嗨,什麼影響(視覺)會改變JPEG的壓縮?謝謝 – Joeblackdev
看看這個帖子http://www.codinghorror。com/blog/2006/07/a-comparison-jpeg-compression-levels-and-recompression.html –
我會仔細看看,謝謝你的鏈接。我想知道,如果有一種方法(使用該鏈接中的圖像)說在jpeg中使用較少的顏色?例如,要使用8位顏色而不是16位顏色?謝謝 – Joeblackdev