如何解决Java中上传的图片自动旋转问题

问题描述 投票:0回答:1

我正在使用javavaadin 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());
    }
java vaadin image-uploading uploader
1个回答
0
投票

我通常使用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目录中,应检测其方向并像此代码一样旋转。祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.