Retención de la orientación de la imagen después de la compresión

Aquí está mi código

// // reading an image captured using phone camera. Orientation of this // image is always return value 6 (ORIENTATION_ROTATE_90) no matter if // it is captured in landscape or portrait mode // Bitmap bmp = BitmapFactory.decodeFile(imagePath.getAbsolutePath()); // // save as : I am compressing this image and writing it back. Orientation //of this image always returns value 0 (ORIENTATION_UNDEFINED) imagePath = new File(imagePath.getAbsolutePath().replace(".jpg", "_1.jpg")); FileOutputStream fos0 = new FileOutputStream(imagePath); boolean b = bmp.compress(CompressFormat.JPEG, 10, fos0); fos0.flush(); fos0.close(); fos0 = null; 

Después de la compresión y el ahorro, la imagen se gira 90 grados aunque ExifInterface devuelve 0 (ORIENTATION_UNDEFINED). Cualquier puntero, ¿cómo puedo retener la orientación de la imagen de origen; En este caso es 6 (o ORIENTATION_ROTATE_90).

Gracias.

Después de poco más de búsqueda en stackoverflow, encontré que alguien ya ha explicado este problema aquí maravillosamente con la solución (que he upvoted).

El siguiente código devolverá Ángulo de imagen por su ORIENTATION .

 public static float rotationForImage(Context context, Uri uri) { if (uri.getScheme().equals("content")) { String[] projection = { Images.ImageColumns.ORIENTATION }; Cursor c = context.getContentResolver().query( uri, projection, null, null, null); if (c.moveToFirst()) { return c.getInt(0); } } else if (uri.getScheme().equals("file")) { try { ExifInterface exif = new ExifInterface(uri.getPath()); int rotation = (int)exifOrientationToDegrees( exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL)); return rotation; } catch (IOException e) { Log.e(TAG, "Error checking exif", e); } } return 0f; } private static float exifOrientationToDegrees(int exifOrientation) { if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) { return 90; } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) { return 180; } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) { return 270; } return 0; } } 
  • Convertir la matriz de bytes de 4 bits en escala de grises a Bitmap Android
  • Bordes dentados en imágenes presentadas en Android
  • Java.io.IOException: BufferedInputStream está cerrado
  • Cómo obtener todas las imágenes y fotos de mi dispositivo android no de sdcard?
  • Desactivar la optimización de recursos / imágenes / png de Android
  • Cargar foto en la galería como objeto de mapa de bits en Android
  • Dimensiones grandes de la imagen de la notificación de Android
  • Cómo agregar efectos de imagen en android?
  • Imagen 9patch con sólo escala horizontal
  • Formatos soportados por BitmapFactory.decodeByteArray (...)
  • Android hace un video animado de la lista de imágenes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.