0

I was trying to copy a picture from URI to a file path. Then I read the picture from the path, but the picture I got was rotated 90 degrees down. Below is my function. Anybody can help on this?

public boolean copyPicture(Context context, Uri source, String dest) {
    boolean result = false;
    int bytesum = 0;
    int byteread = 0;
    File destFile = new File(dest);
    String scheme = source.getScheme();
    if (ContentResolver.SCHEME_CONTENT.equals(scheme)
            || ContentResolver.SCHEME_FILE.equals(scheme)) {
        InputStream inStream = null;
        try {
            inStream = context.getContentResolver().openInputStream(source);
            if (!destFile.exists()) {
                result = destFile.createNewFile();
            }
            if (result) {
                FileOutputStream fs = new FileOutputStream(dest);
                byte[] buffer = new byte[1024];
                while ((byteread = inStream.read(buffer)) != -1) {
                    bytesum += byteread; //字节数 文件大小
                    System.out.println(bytesum);
                    fs.write(buffer, 0, byteread);
                }
                inStream.close();
                fs.flush();
                fs.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
            result = false;
        }
    }
    return result;
}
lei zhang
  • 11
  • 3
  • http://stackoverflow.com/questions/33406377/how-to-solve-image-capturing-automatically-rotating-90-degrees-in-android/33406434#33406434 – Anoop M Maddasseri Nov 04 '15 at 07:51
  • Thanks Anoop. But I wanna know why the picture is rotated during the copy function. Or how can I avoid the rotation. – lei zhang Nov 04 '15 at 08:58

1 Answers1

1

EXIF INTERFACE is the answer. It allows you to read specified attributes from a image file.

Bitmap  bitmap = BitmapFactory.decodeFile(path, options);
                 try {

                        ExifInterface exif = new ExifInterface(path);
                        int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

                        int angle = 0;

                        if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
                            angle = 90;
                        } 
                        else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) {
                            angle = 180;
                        } 
                        else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) {
                            angle = 270;
                        }
                        Matrix mat = new Matrix();
                        mat.postRotate(angle);
                        Bitmap correctBmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), mat, true);                 
                    bitmap=correctBmp;
                 }
                 catch(Exception e){

                 }
Vishavjeet Singh
  • 1,385
  • 11
  • 13