2011-05-09 153 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