我试图在Gluon Mobile中使用PictureService来获取可以存储在MySQL表(Blob)中的个人资料图片。从服务的返回图像对象获取字节数组(以及可能的base64编码字符串)的最佳方法是什么?我尝试了SwingFXUtils,但它导致应用程序在我的Android上崩溃。因此,我不确定是否支持SwingFXUtils。
Services.get(PicturesService.class).ifPresent(service -> {
service.takePhoto(false).ifPresent(image -> {
try {
byte[] imageStream = PictureFactory.convertToByteArray(image);
//String base64String = Base64.getEncoder().encodeToString(imageStream);
//this.picModel.setByteArray(imageStream);
//this.picModel.setBase64Str(base64String);
//this.picModel.setPatientId(User.patient.getPatientId());
av.setImage(image); //Avatar
av.setRotate(-90);
if (this.imageBox.getChildren().size() < 3) {
this.imageBox.getChildren().add(0, av);
}
} catch (Exception ex) {
Logger.getLogger(PictureFactory.class.getName()).log(Level.SEVERE, null, ex);
}
});
});
字节数组转换代码:
public static byte[] convertToByteArray(Image img) throws IOException {
BufferedImage byteImg = SwingFXUtils.fromFXImage(img, null);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
ImageIO.write(byteImg, "png", stream);
byte[] result = stream.toByteArray();
stream.close();
return result;
}
我也遇到的一个完全不相关的问题是,当以纵向模式拍摄时,图像顺时针旋转90度。有任何解决这个问题的方法吗?我希望它可以在图像本身中修复,然后发送到数据库而不是旋转图像视图。