2013-04-12 118 views
3

我目前使用下面的代碼縮放圖像。Java圖像縮放提高質量?

Image scaledImage = img.getScaledInstance(width, int height, Image.SCALE_SMOOTH); 
BufferedImage imageBuff = new BufferedImage(width, scaledImage.getHeight(null), BufferedImage.TYPE_INT_RGB); 
Graphics g = imageBuff.createGraphics(); 
g.drawImage(scaledImage, 0, 0, new Color(0, 0, 0), null); 
g.dispose(); 
ImageIO.write(imageBuff, "jpg", newFile); 

任何人有任何的縮放圖像和獲取質量更好的效果,甚至對提高我當前的代碼,以獲得更好的輸出質量的任何幫助的一個更好的辦法的想法。

+0

你可以看看'SCALE_ *'上http://docs.oracle.com/javase/7/docs/api/java/awt/Image.html – Kninnug

+0

我覺得領域這將是有益的http://ebhor.com/high-quality-thumbnail-generation-in-java/ – xrcwrn

+0

我已經在這裏詳細回答你的問題:http://stackoverflow.com/questions/3967731/how-to - 改進g-drawimage-performance-of-resizing-images/32266733#32266733 – nemo

回答

3

您可以使用Affine Transorm

public static BufferedImage getScaledImage(BufferedImage image, int width, int height) throws IOException { 
    int imageWidth = image.getWidth(); 
    int imageHeight = image.getHeight(); 

    double scaleX = (double)width/imageWidth; 
    double scaleY = (double)height/imageHeight; 
    AffineTransform scaleTransform = AffineTransform.getScaleInstance(scaleX, scaleY); 
    AffineTransformOp bilinearScaleOp = new AffineTransformOp(scaleTransform, AffineTransformOp.TYPE_BILINEAR); 

    return bilinearScaleOp.filter(
     image, 
     new BufferedImage(width, height, image.getType())); 
} 

也可以嘗試這個Example

也儘量java-image-scaling

+0

使用java-image-scaling庫獲得最佳效果。 – JCS