Alo Pessoal, estou com o seguinte Problema
Estou gravando uma Imagem no banco de dados MySQL, mas o problema é que quando recupero a imagem no Banco, ela perde qualidade (Acabei por ver que a falta de qualidade so se nota em programas como Picasa, Windows Fax and photo, etc) no Broswer nao se nota
Aqui estão o metodo que uso para inserir a imagem no Banco de dados
public void gravarimagem(File imagem) throws FileNotFoundException, SQLException{
FileInputStream foto = new FileInputStream(imagem);
String sql = "insert into tabela values(NULL,?)";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
stmt.setBinaryStream(1, foto, imagem.length());
stmt.execute();
}
e para Ler a imagem do Banco aqui esta o codigo:
public InputStream LerImagem() throws SQLException{
String sql = "Select * from tabela";
PreparedStatement stmt = this.conexao.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
Blob a = null;
while(rs.next()){
a = rs.getBlob("foto");
}
return a.getBinaryStream();
}
Na classe de testes uso o seguinte codigo, para fazer o teste:
public static void main(String[] args) throws SQLException, ClassNotFoundException, FileNotFoundException, IOException {
consultas consultas = new consultas();
InputStream a = consultas.LerImagem();
if (a != null) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] rb = new byte[1024];
int ch = 0;
while ((ch = a.read(rb)) != -1) {
output.write(rb, 0, ch);
}
byte[] b = output.toByteArray();
output.close();
output.close();
Image c = new ImageIcon(b).getImage();
if (c == null) {
return;
}
BufferedImage img = new BufferedImage(c.getWidth(null), c.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
g2d.drawImage(c, 0, 0, null);
g2d.dispose();
ImageIO.write(img, "JPG", new File("imagem.jpg"));
}
}
Agora, vejam a diferença entre a Imagem que insiro, e a imagem que recupero
)