我正在使用java和vaadin 14作为Web框架。在vaadin中,我正在使用Vaadin Uploader组件从android手机上的相机或图片库上传图像。当我从图库中选择图像时,它将被上传并正常显示。但是,当我尝试从特定设备(三星)的手机摄像头上传图像时,上传的图像会自动旋转。这意味着,如果以横向拍摄,则上传的图像以纵向显示,如果以纵向拍摄,则显示为横向。怎么解决呢?注意:并非所有的Android设备都会出现这种情况。仅在三星s7等三星android设备中。这是我的代码-
import com.vaadin.flow.component.upload.SucceededEvent;
import com.vaadin.flow.component.upload.Upload;
private void fileUploaderInit() {
uploader = new Upload(buffer);
uploader.setMaxFiles(1);
uploader.setDropAllowed(false);
uploader.setAcceptedFileTypes("image/*");
uploader.getElement().removeProperty("capture");
uploader.setUploadButton(image);
uploader.addSucceededListener(event -> {
succeedEvent = event;
saveUploadedImage();
setUserImage();
});
uploader.getElement().addEventListener("file-abort", remove -> {
succeedEvent = null;
});
uploadLayout.add(uploader);
}
private void saveUploadedImage() {
if (succeedEvent != null && userEntity != null) {
addData();
succeedEvent = null;
Notification.show("Image saved successfully.",2000, Position.MIDDLE);
userEvent.fire(new UserEvent(userEntity,false));
}
uploader.getElement().setPropertyJson("files", Json.createArray());
}
我通常使用Retrofit来上传图像和文件,但与上传服务无关。它仅与相机图像处理有关。让我向您展示解决轮换问题的代码。
public Bitmap getImageFromPath(String photoPath) {
Bitmap bitmap = BitmapFactory.decodeFile(photoPath);
Bitmap rotatedBitmap = bitmap;
ExifInterface ei = null;
try {
ei = new ExifInterface(photoPath);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotatedBitmap = rotateImage(bitmap, 90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotatedBitmap = rotateImage(bitmap, 180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotatedBitmap = rotateImage(bitmap, 270);
break;
case ExifInterface.ORIENTATION_NORMAL:
default:
rotatedBitmap = bitmap;
}
} catch (IOException e) {
e.printStackTrace();
}
return rotatedBitmap;
}
从相机拍摄图像后,将其保存到android目录中,应检测其方向并像此代码一样旋转。祝你好运。