如何修复java中上传的图像自动旋转问题

我正在使用 java vaadin 14 作为网络框架。 在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());
    }
q791656449 回答:如何修复java中上传的图像自动旋转问题

我通常使用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;

}

从Camera拍摄图像后,将其保存到android目录中,应该检测其方向并像此代码一样旋转。 祝你好运。

本文链接:https://www.f2er.com/3059780.html

大家都在问