【问题标题】:How to fix uploaded image auto rotate problem in java如何在java中修复上传的图像自动旋转问题
【发布时间】:2020-03-17 02:53:36
【问题描述】:

我使用 javavaadin 14 作为 Web 框架。 在 vaadin 中,我使用 Vaadin Uploader 组件从 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】:

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

    【讨论】:

    • 如何在 web 框架上实现它?我认为您的解决方案与android开发有关。
    猜你喜欢
    • 1970-01-01
    • 2017-01-29
    • 2019-12-14
    • 2023-03-11
    • 2017-03-31
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    相关资源
    最近更新 更多