Android 以错误的方向存储图像

Android 以错误的方向存储图像,android,Android,在纵向模式下拍摄的图像将保存在横向模式下。但在横向模式下拍摄的图像会正确保存 private class SaveImageTask extends AsyncTask<byte[], Void, Void> { @Override protected Void doInBackground(byte[]... data) { FileOutputStream outStream = null; int rotate = 0;

在纵向模式下拍摄的图像将保存在横向模式下。但在横向模式下拍摄的图像会正确保存

private class SaveImageTask extends AsyncTask<byte[], Void, Void> {
    @Override
    protected Void doInBackground(byte[]... data) {

        FileOutputStream outStream = null;
        int rotate = 0;
        try {
            File sdCard = Environment.getExternalStorageDirectory();
            File dir = new File(sdCard.getAbsolutePath() + "/SELFie");
            dir.mkdirs();
            String fileName = String.format("%d.jpg", System.currentTimeMillis());

            // Before saving to the file rotate to portrait and save it in a right ratio.

            File outFile = new File(dir, fileName);
            Log.d("SaveImageTask","It is a OutPut media file");
            outStream = new FileOutputStream(String.valueOf(outFile));
            Log.d("SaveImageTask","OutStream");

            // writing data to the file

            outStream.write(data[0]);
            Log.d("SaveImageTask","writing the data to the outStream");
            outStream.flush();

            Log.d("SaveImageTask","OutStream.flush");
            outStream.close();

              Log.d("SaveImageTask","closing the outStream");
            Log.d(DEBUG_TAG, "onPictureTaken - wrote bytes: " + data.length + " to " +       outFile.getAbsolutePath());

             // Refreshing the gallery to save recently taken photos.

             refreshGallery(outFile);

             // After calling the refreshGallery method.

        } catch (FileNotFoundException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();

        } finally {
        }
        return null;

        // Finally returning the null.
    }
}
私有类SaveImageTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(字节[]…数据){
FileOutputStream扩展流=null;
int=0;
试一试{
文件sdCard=Environment.getExternalStorageDirectory();
File dir=新文件(sdCard.getAbsolutePath()+“/SELFie”);
dir.mkdirs();
字符串文件名=String.format(“%d.jpg”,System.currentTimeMillis());
//在保存到文件之前,旋转到纵向并以正确的比例保存。
文件输出文件=新文件(目录,文件名);
Log.d(“SaveImageTask”,“它是一个输出媒体文件”);
outStream=新文件OutputStream(String.valueOf(outFile));
Log.d(“保存图像任务”、“扩展”);
//将数据写入文件
超流写入(数据[0]);
Log.d(“SaveImageTask”,“将数据写入扩展流”);
冲水;
Log.d(“SaveImageTask”、“OutStream.flush”);
exptream.close();
Log.d(“SaveImageTask”,“关闭外扩”);
Log.d(DEBUG_标记,“onPictureTaken-写入字节:“+data.length+”到“+outFile.getAbsolutePath());
//刷新图库以保存最近拍摄的照片。
刷新画廊(outFile);
//调用refreshGallery方法后。
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
}
返回null;
//最后返回空值。
}
}

一些Android摄像头硬件将在横向中创建肖像图像,JPEG文件中的EXIF头指示图像查看器应旋转图像


一些Android摄像头硬件将创建肖像图像作为肖像


对此你真的无能为力。欢迎您扫描生成的JPEG文件中的EXIF标题,并自行旋转图像,但这样做速度慢且占用大量内存。

感谢您的快速响应。如果你在保存到画廊之前帮我旋转图片,我会更加感激。在保存到图库之前,我还需要处理图像的纵横比