Olá, estou desenvolvendo um projeto pro meu TCC e estou criando uma pequena aplicação para gerenciar uma turma em uma escola. Nessa aplicação os alunos são cadastrados com seus dados e uma foto. Eu estava tentando salvar a imagem no banco de dados, mas tá se mostrando um pouco mais complicado do que parecia nas aulas que vi. Decidi então, salvar apenas o caminho da imagem no BD e salvar a imagem em uma pasta específica da aplicação(C:/siade/sistema/arquivos/imagens).
A imagem tá carregada em uma JLabel e quero salvar em formato jpg.
Alguém pode me dar uma dico de como proceder?
Se você já tem a imagem em um caminho fixo, por que não salva (ou copia) a imagem diretamente desse arquivo, em vez de pegar do JLabel?
De toda forma, você pode pegar a imagem de um JLabel com o método getIcon(), que retorna um Icon. Se precisa de outro tipo de objeto, pode fazer a conversão. Ex: https://stackoverflow.com/questions/14228433/how-to-convert-jlabel-geticon-to-bufferedimage
Abraço.
Os passos do usuário vão ser o seguinte:
preenche o campo CPF;
Seleciona a Imagem;
A imagem é carregada em uma JLABEL;
Ao salvar o cadastro o programa SALVA a imagem em uma pasta específica.
Se você já tem a imagem em um caminho fixo, por que não salva (ou copia) a imagem diretamente desse arquivo, em vez de pegar do JLabel?
Se a gente precisar fazer as coisas manualmente pra que criar aplicações? Para facilitar. Eu não quero que meu usuário tenha que entrar em 4 pastas para salvar uma foto tendo que renomear com o cpf se já o digitou no frame do programa.
Criando a variável para armazenar a imagem.
BufferedImage imagem;
Definindo a imagem na label:
JFileChooser fc = new JFileChooser();
int res = fc.showOpenDialog(null);
if (res == JFileChooser.APPROVE_OPTION) {
File arquivo = fc.getSelectedFile();
try {
imagem = ManipularImagem.setImagemDimensao(arquivo.getAbsolutePath(), 173, 139); // 173x139 será o tamanho da imagem na label. Você pode definir qualquer um, mas recomendo já deixar a label no tamanho que fai ficar depois de receber a imagem para já fazer a parte de designer .
lblImagem.setText("");
lblImagem.setIcon(new ImageIcon(imagem));
} catch (Exception ex) {
// System.out.println(ex.printStackTrace().toString());
}
} else {
JOptionPane.showMessageDialog(null, "Você Não Selecionou Um Arquivo.");
}
Salvando a Imagem:
try {
String caminho = "C://"; //caminho onde a imagem será salva
String nomedaimagem = "digiteonomedaimagemaqui"; // aqui você define o nome da imagem. Eu salvo nessa variável o CPF do aluno referente a foto, para que depois somente com o cpf o programa possa encontrala e carregar a imagem junto aos outros dados.
File outputfile = new File(caminho+nomedaimagem+".jpg");
ImageIO.write(imagem, "jpg", outputfile);
} catch (IOException ex) {
Logger.getLogger(tAlunos.class.getName()).log(Level.SEVERE, null, ex);
}
Acho que você não entendeu o que eu disse. A sugestão não era pra você (ou o usuário) copiar manualmente, mas sim você programar a cópia de um ponto pra outro, já que possui o caminho de onde quer copiar e para onde quer gravar, sem passar por um JLabel (que é o que sua pergunta dava a entender). Foi exatamente o que você na sua solução.
Abraço.
Não tem caminho fixo para a origem do arquivo, o usuário pode selecionar qualquer imagem em qualquer lugar com o seletor de arquivos. Eu entendi o que você disse, creio que vc que não compreendeu.
Abraço.