2012-01-10 18 views

उत्तर

12

आप EXIF ​​टैग तस्वीर में एम्बेडेड का उपयोग करने की जरूरत है। यह रोटेशन और मिररिंग की सभी किस्मों की अनुमति देता है। मैंने पाया सबसे अच्छा संदर्भ here है। सामान्य तौर पर, के बाद आप उन्मुखीकरण मिलता है, आप डिग्री में रोटेशन पाने के लिए एक देखने समारोह के माध्यम से इसे चलाने के लिए चाहता हूँ:

private int getBitmapRotation() { 
    int rotation = 0; 
    switch (getExifOrientation()) { 
    case ExifInterface.ORIENTATION_ROTATE_180: 
     rotation = 180; 
     break; 
    case ExifInterface.ORIENTATION_ROTATE_90: 
     rotation = 90; 
     break; 
    case ExifInterface.ORIENTATION_ROTATE_270: 
     rotation = 270; 
     break; 
    } 

    return rotation; 
} 
+2

मुझे त्रुटि मिली "01-11 00: 51: 37.687: ERROR/JHEAD (7055): उस पंक्ति पर '/file:/mnt/sdcard/.temp/photo1151619024.jpg' नहीं खोल सकता" exif = new ExifInterface (एममैजपाथ); " – StoneHeart

+0

मुझे यकीन है कि फ़ाइल अभी भी है और मैंने पहले से ही एंड्रॉइड.permission.WRITE_EXTERNAL_STORAGE को मैनिफेस्ट – StoneHeart

+2

/फ़ाइल में अनुमति सेट की है:/पथ के उचित हिस्से की तरह नहीं दिखता है ... यह शायद बस/mnt/sdcard/... – elijah

1

का अभिविन्यास जानने में सहायता चाहिए, क्या आप फोटो ऊंचाई और चौड़ाई के आधार पर अभिविन्यास निर्धारित कर सकते हैं? यदि यह लंबा है, तो यह लंबा है, यह परिदृश्य है। यदि यह चौड़ा था, तो यह चौड़ा था, यह चित्र है।

यदि यह वर्ग है, तो आपको EXIF ​​डेटा पढ़ना होगा और उम्मीद है कि यह उन छवियों के लिए सेट है। EXIF डेटा को उन्मुखीकरण डेटा देना चाहिए।

private int getExifOrientation() { 
    ExifInterface exif; 
    int orientation = 0; 
    try { 
    exif = new ExifInterface(mImagePath); 
    orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
    Log.d(TAG, "got orientation " + orientation); 
    return orientation; 
} 

हालांकि, लौटे वास्तविक EXIF ​​मूल्य sorta अजीब है:

+0

नहीं, उनके पास समान चौड़ाई और ऊंचाई – StoneHeart

+0

आयाम काफी पर्याप्त नहीं हैं - यह परिदृश्य हो सकता है लेकिन उल्टा हो सकता है, इस पर निर्भर करता है कि मैंने अपना फोन बाईं ओर या फोटो लेने के अधिकार के आधार पर किया है या नहीं। –

7

मैं अपने समस्या के लिए एक समान समाधान के लिए खोज रहा था। मैं कैमरे या गैलरी से एक फोटो ले रहा हूं और इसे अपने ऐप में उपयोग करने के लिए बिटमैप में बदल रहा हूं। समस्या यह थी कि पोर्ट्रेट में ली गई तस्वीरों को -90 डिग्री घुमाया जा रहा था।

उत्तर के लिए खोज मुझे यह पोस्ट मिला और https://stackoverflow.com/a/11081918/3062284 जो बहुत समान हैं। मैं वास्तव में बाद की पोस्ट का इस्तेमाल किया। हालांकि, @StoneHeart की तरह मुझे छवि पथ पढ़ने में त्रुटि हो रही थी।

मैं अपने onActivityResult() में इस कोड का उपयोग किया गया था:

case CAMERA_REQUEST_CODE: 
if (resultCode == RESULT_OK); 
uriImage = data.getData(); 
ExifInterface exif = new ExifInterface(uriImage.getPath()); 

के बाद से इस त्रुटि पिछली टिप्पणी मैंने सोचा कि मैं समाधान मैं https://stackoverflow.com/a/10564727/3062284

का उपयोग कर पाया मैं वास्तविक जरूरत का हिस्सा हैं में संबोधित नहीं किया गया था पोस्ट से इस विधि का उपयोग कर फ़ाइल के लिए पथ।

 private String getRealPathFromURI(Uri contentUri) { 
     String[] proj = { MediaStore.Images.Media.DATA }; 
     CursorLoader loader = new CursorLoader(this, contentUri, proj, null, null, null); 
     Cursor cursor = loader.loadInBackground(); 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 

और निम्नलिखित करने के लिए अपने कोड संपादन:

case CAMERA_REQUEST_CODE: 
if (resultCode == RESULT_OK); 
uriImage = data.getData(); 
String imagePath = getRealPathFromURI(uriImage); 
ExifInterface exif = new ExifInterface(imagePath); 

और कहा कि तय "JHEAD कर सकते हैं फ़ाइल नहीं खोल" त्रुटि मैं हो रही थी।

+0

बूम आपने बस मेरी 2 घंटे की समस्या समाप्त कर दी! –

+0

जेडड मुद्दे के लिए सर्वश्रेष्ठ समाधान – rookieDeveloper

संबंधित मुद्दे