E aí galera, td blza?
Alguém tem idéia de como eu posso fazer um merge de duas imagens, salvando uma delas sobre a outra, como se fosse uma marca d’água?
imagem1.jpg
|----------------------|
|----------------------|
|----------------------|
|----------------------|
|----------------------|
|----------------------|
|----------------------|
imagem2.jpg
|---|
imagem3.jpg (resultado)
|----------------------|
|----------------------|
|----------------------|
|----------------------|
|----------------------|
|----------------|---|-|
|----------------------|
estou quase com a biblioteca JAI, mas a marca dágua está ficando no canto superior esquerdo da imagem de fundo
… vejam só:
RenderedImage bg = JAI.create("fileload","c:\\temp\\background.jpg");
RenderedImage fg = JAI.create("fileload","c:\\temp\\foreground.jpg");
TiledImage ti =
new TiledImage(bg.getMinX(),
bg.getMinY(),
bg.getWidth(),
bg.getHeight(),
bg.getTileGridXOffset(),
bg.getTileGridYOffset(),
bg.getSampleModel(),
bg.getColorModel());
ti.set(bg);
Rectangle r =
new Rectangle(fg.getMinX(),
fg.getMinY(),
fg.getWidth(),
fg.getHeight());
ROI roi = new ROIShape(r);
ti.setData(fg.getData(), roi);
JAI.create("filestore",ti,"c:\\temp\\result.jpg","jpeg",null);
Será que não é por JPG não aceitar transparência??
Acho que deverias tentar com PNG, ou GIF…
[ ]'s…
isso eu sei, mas o problema está no posicionamento da imagem… ela deveria ficar no canto inferior e está ficando no superior…
Galera, consegui fazer o merge das imagens, mas não consigo salvá-la, faço tudo que quero na imagem e obtenho um objeto do tipo Graphics2D, mas como salvar essa imagem em formato JPG?
Abaixo segue o código de testes que estou executando…
public class TransparentImage
extends JFrame {
BufferedImage bi1;
BufferedImage bi2;
public static void main(String args[]) {
TransparentImage ti = new TransparentImage( );
ti.setSize(400, 400);
ti.setVisible(true);
ti.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public TransparentImage( ) {
Image image1 = Toolkit.getDefaultToolkit().getImage("c:\\temp\\logo.jpg");
Image image2 = Toolkit.getDefaultToolkit().getImage("c:\\temp\\inverno.jpg");
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(image1, 0);
tracker.addImage(image2, 0);
try {
tracker.waitForID(0); }
catch (InterruptedException ie) {
ie.printStackTrace( ); }
bi1 = new BufferedImage(image1.getWidth(null), image1.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = bi1.createGraphics( );
g2.drawImage(image1, null, null);
bi2 = new BufferedImage(image2.getWidth(null), image2.getHeight(null), BufferedImage.TYPE_INT_ARGB);
g2 = bi2.createGraphics( );
g2.drawImage(image2, null, null);
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
Point2D center = new Point2D.Float(this.getHeight( ) / 2, this.getWidth( ) / 2);
AffineTransform at = AffineTransform.getTranslateInstance(center.getX( ) - (bi2.getWidth( ) / 2), center.getY( ) - (bi2.getHeight( ) / 2));
g2.transform(at);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.drawImage(bi2, 0, 0, null);
/*AlphaComposite c = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .99f);
g2.setComposite(c);*/
at = AffineTransform.getTranslateInstance(center.getX( ) - (bi1.getWidth( ) / 2), center.getY( ) - (bi1.getHeight( ) / 2));
g2.setTransform(at);
g2.drawImage(bi1, 0, 0, null);
Image img = this.createImage(this.getWidth(),this.getHeight());
BufferedImage bi3 = new BufferedImage(img.getWidth(null),img.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics2D g3 = bi3.createGraphics();
try {
ImageIO.write(bi3,"jpg",new File("C:\\temp\\logo_.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}