Olá galera,
Estou com uma dúvida e gostaria que, caso alguém pudesse, me ajudasse.
Estou tentando montar uma webapp que gere parte do seu layout dinamicamente. Para isso preciso executar a seguinte tarefa:
Dada uma imagem já existente (um PNG, JPEG, GIF, etc…), gostaria de imprimir uma string nessa imagem. Exemplo: Imagine que eu tenho uma foto submetida por um usuário, e deseje escrever no rodapé da foto o nome do usuário para ficar uma foto personalizada. Essa string irá mudar, por isso preciso desse aspecto dinâmico.
Desde já agradeço a ajuda
[]'s
Imprimir uma string em uma img já existente
6 Respostas
Olha eu pensei em uma coisa aqui mais não sei se da certo… se a String for sempre no rodapé da imagem você tem que arrumar um jeito de pegar as dimensões da imagem… deve ter um método pra isso… ai você dria um JLabel de acordo com as dimensões da imagem e set para ele visible false. Quando você entrar com a String você seta no JLabel visible true e da o valor da String para ele.
Espero ter ajudado, a parte de implementação não posso fazer porque não sou nada bom em designer 
xgucax,
Para fazer isso vc pode usar Graphics2D.
Carregue a imagem em um buffer
BufferedImage buffImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
g.drawImage(img, null, null);
o pulo do gato esta aqui, vc pode formatar a string, definido font, cor, tamanho, etc
g.setColor(Color.RED);
g.setFont(new Font("Verdana", Font.BOLD, 16));
g.drawString((new Date()).toString(), 10, 25);
e salva a imagem
ImageIO.write(buffImg, "png", new File("c:\minhaImagem.png"));
a referencia img é uma java.awt.Image
Um exemplo completo bem como o pm falou… 
package panel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
*
* @author fabiofalci
*/
public class MyPanel2 extends JPanel {
private Image background;
public MyPanel2() {
this.initialize();
}
protected void initialize() {
Image source = this.getImage("background.gif").getImage();
BufferedImage bufferedImage = new BufferedImage(source.getWidth(null),
source.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D imageGraphics = bufferedImage.createGraphics();
imageGraphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
imageGraphics.drawImage(source, 0, 0, this);
imageGraphics.setColor(Color.BLUE);
imageGraphics.drawString("Portal Java", 15, 15);
try {
String tmpDir = System.getProperty("java.io.tmpdir") + "java.jpg";
System.out.println("Vou tentar gravar a imagem em " + tmpDir);
writeImage(bufferedImage, tmpDir, (float) 0.8);
} catch (Exception e) {
e.printStackTrace();
}
this.background = bufferedImage;
}
public ImageIcon getImage(String path) {
URL imageURL = getClass().getResource(path);
if (imageURL == null) {
return null;
}
return new ImageIcon(imageURL);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(this.background, 0, 0, this);
}
public static void writeImage(BufferedImage image, String dir, float quality)
throws ImageFormatException, IOException {
BufferedOutputStream out = null;
out = new BufferedOutputStream(new FileOutputStream(dir));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
param.setQuality(quality, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(image);
out.close();
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new MyPanel2());
frame.setSize(400, 300);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);
}
}
Deu certo. Obrigado!
como posso gerar a imagem sendo que eu tenho um objeto image do bd,ela fica no formato abaixo…queria recupera-la e nem precisaria salva-la, apenas exibir e bendita ehehehehehhe,obrigado
0xFFD8FFE000104A46494600010100000100010000FFDB004300100B0C0E0C0
A100E0D0E1211101318281A181616183123251D283A333D3C3933383740485
C4E404457453738506D51575F626768673E4D71797064785C656763FFDB004
3011112121815182F1A1A2F6342384263636363636363636363636363636363
636363