2011-05-09 29 views
5

Cuál es la mejor biblioteca de Java para hacer recortar.El objetivo es mantener la claridad de la imagen recortada con un zoom de 2x.Los lados de la imagen recortada se vuelven borrosos mientras se acerca al nivel 2X.Probé imágenes avanzadas de Java (JAI) para recortar con sugerencias para renderizar. También probé RecaleDescriptor (JAI) para mejorar la imagen. Pero funciona solo para una partícula negra en un fondo blanco. ¿Hay alguna otra biblioteca que pueda usar?Recorte de imagen mejorada

+0

¿Está cambiando el tamaño antes del recorte? –

+0

no. Solo estoy haciendo el recorte – aruns

+0

Entonces ... haga el redimensionamiento primero. Pensé que eso habría sido obviamente implícito. –

Respuesta

0

Recomiendo ImageJ, una gran biblioteca para el procesamiento de imágenes.

Aquí es un ejemplo de código para el cultivo:

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

Antes de utilizar librerías externas intente configurar estos consejos de representación (por prestación swing "normal"):

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); 

El código siguiente produce captura de pantalla:

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

Usando Thumbnailator, se puede recortar la imagen original y el zoom en esa región con el siguiente código:

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

Lo anterior se llevará a los 100 píxeles por 100 región central píxeles de la imagen original y agrandar por un factor de escala de 2.0x utilizando bicubic interpolation para dar lugar a una imagen suave, sin bordes dentados:

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

Aunque Thumbnailator es una biblioteca que se especializa en la creación de miniaturas (de ahí el nombre), generalmente se puede adaptar para crear imágenes ampliadas.

Descripción completa: Soy el desarrollador de Thumbnailator.

+0

Feliz de finalmente conocerte coobird. Uso su biblioteca en mi sitio y funciona muy bien. Gracias por crear una herramienta tan ingeniosa. – qualebs