2012-12-17 26 views
6

đây là mã của tôiduy trì định hướng hình ảnh sau khi nén

 // 
     // 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; 

Sau khi nén và tiết kiệm, ảnh có thể xoay 90 độ mặc dù ExifInterface trả về 0 (ORIENTATION_UNDEFINED). Bất kỳ con trỏ, làm thế nào tôi có thể giữ lại định hướng của hình ảnh nguồn; trong trường hợp này là 6 (hoặc ORIENTATION_ROTATE_90).

cảm ơn.

Trả lời

4

Sau ít tìm kiếm thêm về stackoverflow, phát hiện ra rằng ai đó đã giải thích vấn đề này here đẹp mắt với giải pháp (mà tôi đã bỏ phiếu tán).

0

Mã sau sẽ trả về Góc của hình ảnh theo số 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; 
} 
} 
+0

cảm ơn Chintan đã trả lời. Những gì bạn đã thể hiện không chính xác là vấn đề của tôi. Tôi biết định hướng. Vấn đề là, sau khi nén, hình ảnh đã lưu luôn tự động xoay 90 độ và trả về 0 hoặc được xác định nếu được truy vấn thông qua ExifInterface. Những gì tôi muốn là, cùng một định hướng của hình ảnh nén trong khi ghi vào tập tin. Hy vọng tôi đã giải thích vấn đề. – iuq

Các vấn đề liên quan