2011-05-09 225 views
5

這是最好的java庫進行裁剪的目的是保持裁剪圖像的清晰度在2倍zoom.The裁剪圖像的兩側變得模糊,而放大到2倍level.I嘗試Java高級成像( JAI)使用渲染提示進行裁剪。我還嘗試使用RescaleDescriptor(JAI)來增強圖像。但它僅適用於白色背景中的黑色粒子。是否有任何其他庫可供我使用?增強圖像裁剪

+0

您是否在裁剪之前調整大小? – 2011-05-09 13:19:27

+0

沒有。我只做剪裁 – aruns 2011-05-10 06:50:04

+0

所以......先調整大小。我認爲這顯然是隱含的。 – 2011-05-10 07:56:38

回答

0

我建議ImageJ,一個偉大的圖像處理庫。

這裏是裁剪一個代碼示例:

ImageProcessor ip = //... get the image processor to crop 
ip.setRoi(left,top,width,height); //set the "Region Of Interest" (rectangle within the image) 
ImageProcessor ip2 = ip.crop(); 
5

使用外部庫嘗試設置這些呈現提示(對於 「正常的」 擺動渲染)之前:

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, 
        RenderingHints.VALUE_INTERPOLATION_BILINEAR); // or .._BICUBIC 

g.setRenderingHint(RenderingHints.KEY_RENDERING, 
        RenderingHints.VALUE_RENDER_QUALITY); 

g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
        RenderingHints.VALUE_ANTIALIAS_ON); 

下面的代碼生成此屏幕截圖:

screenshot

public static void main(String[] args) throws IOException { 
    BufferedImage o = ImageIO.read(new URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png")); 
    final BufferedImage image = o.getSubimage(220, 220, 80, 80); 
    final int width = image.getWidth() * 4; 
    final int height = image.getHeight() * 4; 

    JFrame frame = new JFrame("Test"); 
    frame.setLayout(new GridLayout(1, 2)); 

    frame.add(new JComponent() { 
     public void paintComponent(Graphics g) { 
      Graphics2D g2d = (Graphics2D) g; 
      g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, 
           RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
      g2d.setRenderingHint(RenderingHints.KEY_RENDERING, 
           RenderingHints.VALUE_RENDER_QUALITY); 
      g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
           RenderingHints.VALUE_ANTIALIAS_ON); 

      g2d.drawImage(image, 0, 0, width, height, null); 
     } 
    }); 
    frame.add(new JComponent() { 
     public void paintComponent(Graphics g) { 
      g.drawImage(image, 0, 0, width, height, null); 
     } 
    }); 

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(649, 351); 
    frame.setVisible(true); 
} 
7

使用Thumbnailator,一個可以裁剪原始圖像和放大該區域用下面的代碼:

Thumbnails.of("/path/to/image") 
    .sourceRegion(Positions.CENTER, 100, 100) 
    .scale(2.0) 
    .resizer(Resizers.BICUBIC) 
    .toFile("/path/to/cropped+zoomed-image"); 

上面將源圖像的中心100像素100像素區域和放大它通過使用bicubic interpolation 2.0倍的縮放因子以產生平滑的圖像,而不鋸齒狀邊緣:

Source image (left) cropped and enlarged by Thumbnailator (right) http://coobird.net/img/zoom-in.jpg

雖然Thumbnailator是一個專門創建縮略圖(因此而得名)的圖書館,它通常也可以用來創建放大的圖像。

完全披露:我是Thumbnailator的開發者。

+0

很高興終於見到你coobird。我在我的網站上使用您的圖書館,效果很好。感謝您創建這樣一個漂亮的工具。 – qualebs 2014-09-28 11:23:28