android - एंड्रॉइड: छविदृश्य पर सेट करते समय गैलरी से ली गई छवि अभिविन्यास(चित्र या परिदृश्य) का पता कैसे लगाएं?




android-imageview android-gallery (4)

मैं गैलरी (कैमरा एल्बम) से ली गई छविदृश्य पर एक छवि सेट कर रहा हूं। यदि चुनी गई छवि में लैंडस्केप ओरिएंटेशन है, तो यह पूरी तरह से प्रदर्शित होता है लेकिन अगर पोर्ट्रेट मोड में छवि (यानी चित्र पोर्ट्रेट मोड में क्लिक किया गया था) तो यह 90 डिग्री रोटेशन के साथ छवि प्रदर्शित कर रहा है। अब मैं छविदृश्य पर सेट करने से पहले अभिविन्यास को खोजने का प्रयास कर रहा हूं, लेकिन सभी छवियां समान अभिविन्यास और समान चौड़ाई-ऊंचाई दे रही हैं। मेरा कोड यहाँ है:

Uri selectedImage = intent.getData();
if (selectedImage != null) {
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);

    int str = new ExifInterface(selectedImage.getPath()).getAttributeInt("Orientation", 1000);
    Toast.makeText(this, "value:" + str, Toast.LENGTH_LONG).show();
    Toast.makeText(this, "width:" + bitmap.getWidth() + "height:" + bitmap.getHeight(), Toast.LENGTH_LONG).show();



घुमाने वाली छवि के लिए ExifInterface उपयोग करें। कैमरा से कैप्चर की गई छवि को घुमाने के लिए सही मान प्राप्त करने के लिए इस विधि का उपयोग करें।

public int getCameraPhotoOrientation(Context context, Uri imageUri, String imagePath){
    int rotate = 0;
    try {
        context.getContentResolver().notifyChange(imageUri, null);
        File imageFile = new File(imagePath);

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

        switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_270:
            rotate = 270;
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            rotate = 180;
            break;
        case ExifInterface.ORIENTATION_ROTATE_90:
            rotate = 90;
            break;
        }

        Log.i("RotateImage", "Exif orientation: " + orientation);
        Log.i("RotateImage", "Rotate value: " + rotate);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return rotate;
}

और इस कोड को गतिविधि परिणाम विधि में रखें और छवि को घुमाने के लिए मूल्य प्राप्त करें ...

String selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};

Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
filePath = cursor.getString(columnIndex);
cursor.close();

int rotateImage = getCameraPhotoOrientation(MyActivity.this, selectedImage, filePath);

उम्मीद है की यह मदद करेगा..


यह मेरे लिए भी काम कर रहा है:

String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION};
Cursor cur = getContentResolver().query(imageUri, orientationColumn, null, null, null);
int orientation = -1;
if (cur != null && cur.moveToFirst()) {
    orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0]));
}
Matrix matrix = new Matrix();
matrix.postRotate(orientation);

यहां एक अच्छा समाधान है जिसके लिए मैं आया:> https://.com/a/34241250/8033090

एक लाइन समाधान:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

या

Picasso.with(context).load("file:" + photoPath).into(imageView);

यह सही अभिविन्यास में रोटेशन और स्थान छवि को स्वत: पता लगाएगा

पिकासो आपके ऐप में छवियों को संभालने के लिए एक बहुत ही शक्तिशाली लाइब्रेरी है: न्यूनतम मेमोरी उपयोग के साथ जटिल छवि परिवर्तन। लोड करने में एक सेकंड लग सकता है लेकिन मैंने छवि दृश्य के पीछे कुछ टेक्स्ट डाला है जो कहता है "छवि लोड हो रहा है" और जब छवि लोड होती है तो यह टेक्स्ट को कवर करती है।





android-gallery