Necesito para combinar dos imágenes (BufferedImage) en Java. No sería un problema si no hay transparencia. La base de la imagen ya tiene un poco de transparencia. Quiero mantener esto como es y de aplicar una «máscara», en la segunda imagen. Esta segunda imagen no tiene los píxeles opacos, de hecho es casi completamente transparente, solo tiene algo menos píxeles transparentes, para dar una especie de «efecto de la luz», como un reflejo. Detalle importante: no quiero hacer esto en la pantalla, con gráficos, necesito obtener un BufferedImage con la resultante de la combinación.

Alguien me puede ayudar?
Gracias!

DETALLES: Combinación de dos imágenes de mantener la transparencia. Esto es lo que tengo que hacer.

Nota: este Conjunto de BufferedImage máscara alfa en Java no hacer lo que tengo porque no se manejan bien con las dos imágenes de la transparencia – se modifica el primer cuadro de la transparencia.

InformationsquelleAutor GuilhermeA | 2010-02-23

3 Comentarios

  1. 172

    Acaba de crear una nueva BufferedImage con transparencia, luego pinte las otras dos imágenes (con full o semi-transparencia) en él.
    Esto es cómo se verá como:

    La fusión de dos imágenes

    Código de ejemplo (imágenes son llamados ‘de la imagen.png’ y ‘superposición.png’):

    File path = ... //base path of the images
    
    //load source images
    BufferedImage image = ImageIO.read(new File(path, "image.png"));
    BufferedImage overlay = ImageIO.read(new File(path, "overlay.png"));
    
    //create the new image, canvas size is the max. of both image sizes
    int w = Math.max(image.getWidth(), overlay.getWidth());
    int h = Math.max(image.getHeight(), overlay.getHeight());
    BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    
    //paint both images, preserving the alpha channels
    Graphics g = combined.getGraphics();
    g.drawImage(image, 0, 0, null);
    g.drawImage(overlay, 0, 0, null);
    
    //Save as new image
    ImageIO.write(combined, "PNG", new File(path, "combined.png"));
    • Hay manera de tener la segunda imagen en el centro de la primera?
    • En caso de no invocar g.dispose(); al final?
    • Hola, he seguido este enfoque y guardar sólo la segunda imagen, pero no la primera imagen…Cualquier ayuda se agradece..
    • La imagen se está en gris, cuando me haga el combinado de archivo como archivo jpeg . Por favor ayuda
  2. 3

    No te puedo dar una respuesta específica, pero java.awt.AlphaComposite aquí es tu amigo. Tendrás control absoluto sobre cómo desea que las dos imágenes que desea combinar. Sin embargo, no es sencillo de utilizar – usted necesita para aprender un poco de los gráficos de la teoría de la primera.

  3. 3

    Sin saber más sobre el efecto que usted está tratando de lograr, sólo voy a señalar que también se puede dibujar a la derecha en un BufferedImage. Así que cualquier cosa que usted podría hacer en la pantalla que usted puede hacer derecho sobre la propia imagen.

    Así que si todo lo que quieres es dibujada en la parte superior de la otra, que es realmente fácil. Acaba de agarrar el objeto Graphics para la base de la imagen y dibujar el otro sobre él.

    De nuevo, dependiendo del efecto que se va para que no funcionen. Más detalles permitiría una mejor ayuda. Por ejemplo, este es un trabajo para AlphaComposite como el otro respondedor menciona o una costumbre ImageOp (o alguna combinación de ImageOps).

Dejar respuesta

Please enter your comment!
Please enter your name here