Example usage for android.media ExifInterface TAG_ORIENTATION

List of usage examples for android.media ExifInterface TAG_ORIENTATION

Introduction

In this page you can find the example usage for android.media ExifInterface TAG_ORIENTATION.

Prototype

String TAG_ORIENTATION

To view the source code for android.media ExifInterface TAG_ORIENTATION.

Click Source Link

Document

Type is int.

Usage

From source file:es.javocsoft.android.lib.toolbox.ToolBox.java

/**
 * Corrects the orientation of a Bitmap. Orientation, depending of the device
 * , is not correctly set in the EXIF data of the taken image when it is saved
 * into disk.//w ww  . ja v a 2s .c  o  m
 * 
 * Explanation:
 *    Camera orientation is not working ok (as is when capturing an image) because 
 *  OEMs do not adhere to the standard. So, each company does this following their 
 *  own way.
 * 
 * @param imagePath   path to the file
 * @return
 */
public static Bitmap media_correctImageOrientation(String imagePath) {
    Bitmap res = null;

    try {
        File f = new File(imagePath);
        ExifInterface exif = new ExifInterface(f.getPath());
        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);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 2;

        Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(f), null, options);
        res = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mat, true);

    } catch (OutOfMemoryError e) {
        if (LOG_ENABLE)
            Log.e(TAG, "media_correctImageOrientation() [OutOfMemory!]: " + e.getMessage(), e);
    } catch (Exception e) {
        if (LOG_ENABLE)
            Log.e(TAG, "media_correctImageOrientation(): " + e.getMessage(), e);
    } catch (Throwable e) {
        if (LOG_ENABLE)
            Log.e(TAG, "media_correctImageOrientation(): " + e.getMessage(), e);
    }

    return res;
}

From source file:com.irccloud.android.activity.MainActivity.java

private Uri resize(Uri in) {
    Uri out = null;/*from  w  ww. ja  va  2 s .  c o  m*/
    try {
        int MAX_IMAGE_SIZE = Integer
                .parseInt(PreferenceManager.getDefaultSharedPreferences(this).getString("photo_size", "1024"));
        File imageDir = new File(Environment.getExternalStorageDirectory(), "IRCCloud");
        imageDir.mkdirs();
        new File(imageDir, ".nomedia").createNewFile();

        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(IRCCloudApplication.getInstance().getApplicationContext()
                .getContentResolver().openInputStream(in), null, o);
        int scale = 1;

        if (o.outWidth < MAX_IMAGE_SIZE && o.outHeight < MAX_IMAGE_SIZE)
            return in;

        if (o.outWidth > o.outHeight) {
            if (o.outWidth > MAX_IMAGE_SIZE)
                scale = o.outWidth / MAX_IMAGE_SIZE;
        } else {
            if (o.outHeight > MAX_IMAGE_SIZE)
                scale = o.outHeight / MAX_IMAGE_SIZE;
        }

        o = new BitmapFactory.Options();
        o.inSampleSize = scale;
        Bitmap bmp = BitmapFactory.decodeStream(IRCCloudApplication.getInstance().getApplicationContext()
                .getContentResolver().openInputStream(in), null, o);

        //ExifInterface can only work on local files, so make a temporary copy on the SD card
        out = Uri.fromFile(File.createTempFile("irccloudcapture-original", ".jpg", imageDir));
        InputStream is = IRCCloudApplication.getInstance().getApplicationContext().getContentResolver()
                .openInputStream(in);
        OutputStream os = IRCCloudApplication.getInstance().getApplicationContext().getContentResolver()
                .openOutputStream(out);
        byte[] buffer = new byte[8192];
        int len;
        while ((len = is.read(buffer)) != -1) {
            os.write(buffer, 0, len);
        }
        is.close();
        os.close();

        ExifInterface exif = new ExifInterface(out.getPath());
        int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
        new File(new URI(out.toString())).delete();

        out = Uri.fromFile(File.createTempFile("irccloudcapture-resized", ".jpg", imageDir));
        if (orientation > 1) {
            Matrix matrix = new Matrix();
            switch (orientation) {
            case ExifInterface.ORIENTATION_ROTATE_90:
                matrix.postRotate(90);
                break;
            case ExifInterface.ORIENTATION_ROTATE_180:
                matrix.postRotate(180);
                break;
            case ExifInterface.ORIENTATION_ROTATE_270:
                matrix.postRotate(270);
                break;
            }
            try {
                Bitmap oldbmp = bmp;
                bmp = Bitmap.createBitmap(oldbmp, 0, 0, oldbmp.getWidth(), oldbmp.getHeight(), matrix, true);
                oldbmp.recycle();
            } catch (OutOfMemoryError e) {
                Log.e("IRCCloud", "Out of memory rotating the photo, it may look wrong on imgur");
            }
        }

        if (bmp == null || !bmp.compress(android.graphics.Bitmap.CompressFormat.JPEG, 90, IRCCloudApplication
                .getInstance().getApplicationContext().getContentResolver().openOutputStream(out))) {
            out = null;
        }
        if (bmp != null)
            bmp.recycle();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        Crashlytics.logException(e);
    } catch (OutOfMemoryError e) {
        Log.e("IRCCloud", "Out of memory rotating the photo, it may look wrong on imgur");
    }
    if (!PreferenceManager.getDefaultSharedPreferences(this).getBoolean("keep_photos", false)
            && in.toString().contains("irccloudcapture")) {
        try {
            new File(new URI(in.toString())).delete();
        } catch (Exception e) {
        }
    }
    if (out != null)
        return out;
    else
        return in;
}

From source file:kr.wdream.ui.ChatActivity.java

@Override
public void onActivityResultFragment(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == 0) {
            PhotoViewer.getInstance().setParentActivity(getParentActivity());
            final ArrayList<Object> arrayList = new ArrayList<>();
            int orientation = 0;
            try {
                ExifInterface ei = new ExifInterface(currentPicturePath);
                int exif = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
                switch (exif) {
                case ExifInterface.ORIENTATION_ROTATE_90:
                    orientation = 90;//from   w ww .ja  v a2 s .c om
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    orientation = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                    orientation = 270;
                    break;
                }
            } catch (Exception e) {
                FileLog.e("tmessages", e);
            }
            arrayList.add(new MediaController.PhotoEntry(0, 0, 0, currentPicturePath, orientation, false));

            PhotoViewer.getInstance().openPhotoForSelect(arrayList, 0, 2,
                    new PhotoViewer.EmptyPhotoViewerProvider() {
                        @Override
                        public void sendButtonPressed(int index) {
                            sendMedia((MediaController.PhotoEntry) arrayList.get(0), false);
                        }
                    }, this);
            AndroidUtilities.addMediaToGallery(currentPicturePath);
            currentPicturePath = null;
        } else if (requestCode == 1) {
            if (data == null || data.getData() == null) {
                showAttachmentError();
                return;
            }
            Uri uri = data.getData();
            if (uri.toString().contains("video")) {
                String videoPath = null;
                try {
                    videoPath = AndroidUtilities.getPath(uri);
                } catch (Exception e) {
                    FileLog.e("tmessages", e);
                }
                if (videoPath == null) {
                    showAttachmentError();
                }
                if (Build.VERSION.SDK_INT >= 16) {
                    if (paused) {
                        startVideoEdit = videoPath;
                    } else {
                        openVideoEditor(videoPath, false, false);
                    }
                } else {
                    SendMessagesHelper.prepareSendingVideo(videoPath, 0, 0, 0, 0, null, dialog_id,
                            replyingMessageObject, null);
                }
            } else {
                SendMessagesHelper.prepareSendingPhoto(null, uri, dialog_id, replyingMessageObject, null, null);
            }
            showReplyPanel(false, null, null, null, false, true);
            DraftQuery.cleanDraft(dialog_id, true);
        } else if (requestCode == 2) {
            String videoPath = null;
            FileLog.d("tmessages", "pic path " + currentPicturePath);
            if (data != null && currentPicturePath != null) {
                if (new File(currentPicturePath).exists()) {
                    data = null;
                }
            }
            if (data != null) {
                Uri uri = data.getData();
                if (uri != null) {
                    FileLog.d("tmessages", "video record uri " + uri.toString());
                    videoPath = AndroidUtilities.getPath(uri);
                    FileLog.d("tmessages", "resolved path = " + videoPath);
                    if (!(new File(videoPath).exists())) {
                        videoPath = currentPicturePath;
                    }
                } else {
                    videoPath = currentPicturePath;
                }
                AndroidUtilities.addMediaToGallery(currentPicturePath);
                currentPicturePath = null;
            }
            if (videoPath == null && currentPicturePath != null) {
                File f = new File(currentPicturePath);
                if (f.exists()) {
                    videoPath = currentPicturePath;
                }
                currentPicturePath = null;
            }
            if (Build.VERSION.SDK_INT >= 16) {
                if (paused) {
                    startVideoEdit = videoPath;
                } else {
                    openVideoEditor(videoPath, false, false);
                }
            } else {
                SendMessagesHelper.prepareSendingVideo(videoPath, 0, 0, 0, 0, null, dialog_id,
                        replyingMessageObject, null);
                showReplyPanel(false, null, null, null, false, true);
                DraftQuery.cleanDraft(dialog_id, true);
            }
        } else if (requestCode == 21) {
            if (data == null || data.getData() == null) {
                showAttachmentError();
                return;
            }
            Uri uri = data.getData();

            String extractUriFrom = uri.toString();
            if (extractUriFrom.contains("com.google.android.apps.photos.contentprovider")) {
                try {
                    String firstExtraction = extractUriFrom.split("/1/")[1];
                    int index = firstExtraction.indexOf("/ACTUAL");
                    if (index != -1) {
                        firstExtraction = firstExtraction.substring(0, index);
                        String secondExtraction = URLDecoder.decode(firstExtraction, "UTF-8");
                        uri = Uri.parse(secondExtraction);
                    }
                } catch (Exception e) {
                    FileLog.e("tmessages", e);
                }
            }
            String tempPath = AndroidUtilities.getPath(uri);
            String originalPath = tempPath;
            if (tempPath == null) {
                originalPath = data.toString();
                tempPath = MediaController.copyFileToCache(data.getData(), "file");
            }
            if (tempPath == null) {
                showAttachmentError();
                return;
            }
            SendMessagesHelper.prepareSendingDocument(tempPath, originalPath, null, null, dialog_id,
                    replyingMessageObject);
            showReplyPanel(false, null, null, null, false, true);
            DraftQuery.cleanDraft(dialog_id, true);
        } else if (requestCode == 31) {
            if (data == null || data.getData() == null) {
                showAttachmentError();
                return;
            }
            Uri uri = data.getData();
            Cursor c = null;
            try {
                c = getParentActivity().getContentResolver().query(uri, new String[] {
                        ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER },
                        null, null, null);
                if (c != null) {
                    boolean sent = false;
                    while (c.moveToNext()) {
                        sent = true;
                        String name = c.getString(0);
                        String number = c.getString(1);
                        TLRPC.User user = new TLRPC.User();
                        user.first_name = name;
                        user.last_name = "";
                        user.phone = number;
                        SendMessagesHelper.getInstance().sendMessage(user, dialog_id, replyingMessageObject,
                                null, null);
                    }
                    if (sent) {
                        showReplyPanel(false, null, null, null, false, true);
                        DraftQuery.cleanDraft(dialog_id, true);
                    }
                }
            } finally {
                try {
                    if (c != null && !c.isClosed()) {
                        c.close();
                    }
                } catch (Exception e) {
                    FileLog.e("tmessages", e);
                }
            }
        }
    }
}

From source file:com.codename1.impl.android.AndroidImplementation.java

@Override
public com.codename1.ui.util.ImageIO getImageIO() {
    if (imIO == null) {
        imIO = new com.codename1.ui.util.ImageIO() {
            @Override/* w ww  .j a va2 s.  com*/
            public Dimension getImageSize(String imageFilePath) throws IOException {
                BitmapFactory.Options o = new BitmapFactory.Options();
                o.inJustDecodeBounds = true;
                o.inPreferredConfig = Bitmap.Config.ARGB_8888;

                InputStream fis = createFileInputStream(imageFilePath);
                BitmapFactory.decodeStream(fis, null, o);
                fis.close();

                ExifInterface exif = new ExifInterface(imageFilePath);

                // if the image is in portrait mode
                int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                        ExifInterface.ORIENTATION_NORMAL);
                if (orientation == ExifInterface.ORIENTATION_ROTATE_90
                        || orientation == ExifInterface.ORIENTATION_ROTATE_270) {
                    return new Dimension(o.outHeight, o.outWidth);
                }
                return new Dimension(o.outWidth, o.outHeight);
            }

            private Dimension getImageSizeNoRotation(String imageFilePath) throws IOException {
                BitmapFactory.Options o = new BitmapFactory.Options();
                o.inJustDecodeBounds = true;
                o.inPreferredConfig = Bitmap.Config.ARGB_8888;

                InputStream fis = createFileInputStream(imageFilePath);
                BitmapFactory.decodeStream(fis, null, o);
                fis.close();

                return new Dimension(o.outWidth, o.outHeight);
            }

            @Override
            public void save(InputStream image, OutputStream response, String format, int width, int height,
                    float quality) throws IOException {
                Bitmap.CompressFormat f = Bitmap.CompressFormat.PNG;
                if (format == FORMAT_JPEG) {
                    f = Bitmap.CompressFormat.JPEG;
                }
                Image img = Image.createImage(image).scaled(width, height);
                Bitmap b = (Bitmap) img.getImage();
                b.compress(f, (int) (quality * 100), response);
            }

            @Override
            public String saveAndKeepAspect(String imageFilePath, String preferredOutputPath, String format,
                    int width, int height, float quality, boolean onlyDownscale, boolean scaleToFill)
                    throws IOException {
                ExifInterface exif = new ExifInterface(imageFilePath);
                Dimension d = getImageSizeNoRotation(imageFilePath);
                if (onlyDownscale) {
                    if (scaleToFill) {
                        if (d.getHeight() <= height || d.getWidth() <= width) {
                            return imageFilePath;
                        }
                    } else {
                        if (d.getHeight() <= height && d.getWidth() <= width) {
                            return imageFilePath;
                        }
                    }
                }

                float ratio = ((float) d.getWidth()) / ((float) d.getHeight());
                int heightBasedOnWidth = (int) (((float) width) / ratio);
                int widthBasedOnHeight = (int) (((float) height) * ratio);
                if (scaleToFill) {
                    if (heightBasedOnWidth >= width) {
                        height = heightBasedOnWidth;
                    } else {
                        width = widthBasedOnHeight;
                    }
                } else {
                    if (heightBasedOnWidth > width) {
                        width = widthBasedOnHeight;
                    } else {
                        height = heightBasedOnWidth;
                    }
                }
                sampleSizeOverride = Math.max(d.getWidth() / width, d.getHeight() / height);
                OutputStream im = FileSystemStorage.getInstance().openOutputStream(preferredOutputPath);
                Image i = Image.createImage(imageFilePath);
                Image newImage = i.scaled(width, height);
                int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                        ExifInterface.ORIENTATION_NORMAL);

                int angle = 0;
                switch (orientation) {
                case ExifInterface.ORIENTATION_ROTATE_90:
                    angle = 90;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    angle = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                    angle = 270;
                    break;
                }
                if (angle != 0) {
                    Matrix mat = new Matrix();
                    mat.postRotate(angle);
                    Bitmap b = (Bitmap) newImage.getImage();
                    Bitmap correctBmp = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), mat, true);
                    b.recycle();
                    newImage.dispose();
                    Image tmp = Image.createImage(correctBmp);
                    newImage = tmp;
                    save(tmp, im, format, quality);
                } else {
                    save(imageFilePath, im, format, width, height, quality);
                }
                sampleSizeOverride = -1;
                return preferredOutputPath;
            }

            @Override
            public void save(String imageFilePath, OutputStream response, String format, int width, int height,
                    float quality) throws IOException {
                Image i = Image.createImage(imageFilePath);
                Image newImage = i.scaled(width, height);
                save(newImage, response, format, quality);
                newImage.dispose();
                i.dispose();
            }

            @Override
            protected void saveImage(Image img, OutputStream response, String format, float quality)
                    throws IOException {
                Bitmap.CompressFormat f = Bitmap.CompressFormat.PNG;
                if (format == FORMAT_JPEG) {
                    f = Bitmap.CompressFormat.JPEG;
                }
                Bitmap b = (Bitmap) img.getImage();
                b.compress(f, (int) (quality * 100), response);
            }

            @Override
            public boolean isFormatSupported(String format) {
                return format == FORMAT_JPEG || format == FORMAT_PNG;
            }
        };
    }
    return imIO;
}