我的应用程序使用phpmyadmin连接到mysql中的数据库并将图像存储在数据库中,但是我的问题是,当我从数据库下载图像并将图像发布到imageview上时,图像的质量很低,颜色也被感染了。
如果我使用phpmyadmin将图像直接发布到数据库中,然后使用我的应用程序下载该图像,则该图像看起来不错,但是如果我从我的应用程序上传该图像然后下载,则质量很差。
发布图像的方法是将图像经过字节[],然后上传到使用blob类型的数据库。
private byte[] imagenToByte(Image imagen) {
BufferedImage bufferimage = SwingFXUtils.fromFXImage(imagen, null);
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
ImageIO.write(bufferimage, "jpg", output );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte [] data = output.toByteArray();
return data;
}
你能帮我吗?
编辑
@FXML
public void eventoBotonSeleccionarImagen() {
FileChooser imagenSeleccionada = new FileChooser();
FileChooser.ExtensionFilter filtroImagenjpg = new ExtensionFilter("Archivos *.jpg", "*.jpg");
FileChooser.ExtensionFilter filtroImagenJPG = new ExtensionFilter("Archivos *.JPG", "*.JPG");
File archivo = imagenSeleccionada.showOpenDialog(null);
try {
BufferedImage bufferedImage = ImageIO.read(archivo);
Image image = SwingFXUtils.toFXImage(bufferedImage, null);
imageViewMonstruo.setImage(image);
}
catch(Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
由于这个原因,我找到了问题的答案 this question。
我所做的是将数据库中的Blob更改为longblob,并添加了png而不是jpg,代码结果就是这样
private byte[] imagenToByte(Image imagen) {
BufferedImage bufferimage = SwingFXUtils.fromFXImage(imagen, null);
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
ImageIO.write(bufferimage, "png", output );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte [] data = output.toByteArray();
return data;
}
最后,它以相同的质量上传和下载图像