26 Stimmen

Thumbnail Uri/Pfad des auf der SD-Karte gespeicherten Bildes abrufen + Android

SDK-Version - 1.6

Ich verwende folgende Absicht, um die Standardgalerie von Android zu öffnen:

Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(
                        Intent.createChooser(intent, "Select Picture"), 101);

Jetzt in onActivityResult Ich bin in der Lage, die ursprüngliche Uri und den Pfad des ausgewählten Bildes zu erhalten, aber ich bin nicht in der Lage, die Uri und den Pfad der Miniaturansicht des ausgewählten Bildes zu erhalten.

Code zum Abrufen der Uri und des Pfades des Originalbildes:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        try {

            if (requestCode == 101 && data != null) {

                Uri selectedImageUri = data.getData();
                String selectedImagePath = getPath(selectedImageUri);
} else {
                Toast toast = Toast.makeText(this, "No Image is selected.",
                        Toast.LENGTH_LONG);
                toast.show();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

PS: 1) ich bin nicht auf der Suche nach einer Größenänderung des Bildes Frage . Ich bin speziell auf der Suche nach den Miniaturbildern, die von Android OS selbst generiert werden.

2) Ich verwende SDK Version 1.6 und bin nicht interessiert an ThumbnailUtils Klasse.

86voto

Karan Punkte 12594

Damit können Sie die Miniaturansicht abrufen:

Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(
                             getContentResolver(), selectedImageUri,
                             MediaStore.Images.Thumbnails.MINI_KIND,
                             (BitmapFactory.Options) null );

Es sind zwei Arten von Miniaturbildern verfügbar:
MINI_KIND: 512 x 384 Vorschaubilder
MICRO_KIND: 96 x 96 Vorschaubilder

ODER verwenden Sie [queryMiniThumbnails][1] mit fast den gleichen Parametern, um den Pfad des Miniaturbildes zu erhalten.

EDIT

Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnails(
                             getContentResolver(), selectedImageUri,
                             MediaStore.Images.Thumbnails.MINI_KIND,
                             null );
if( cursor != null && cursor.getCount() > 0 ) {
     cursor.moveToFirst();//**EDIT**
     String uri = cursor.getString( cursor.getColumnIndex( MediaStore.Images.Thumbnails.DATA ) );
}

HTH !

[1]: [https://developer.Android.com/reference/Android/provider/MediaStore.Images.Thumbnails.html#queryMiniThumbnails(Android.content.ContentResolver](https://developer.android.com/reference/android/provider/MediaStore.Images.Thumbnails.html#queryMiniThumbnails(android.content.ContentResolver) , Android.net.Uri, int, java.lang.String[])

12voto

Mete Punkte 2777

Diese Lösung ist die Arbeit an mir!

final int THUMBSIZE = 128;

Bitmap thumbImage = ThumbnailUtils.extractThumbnail(
                         BitmapFactory.decodeFile(file.getAbsolutePath()), 
                         THUMBSIZE, 
                         THUMBSIZE);

8voto

dharam Punkte 7739

Es könnte eine alternative Möglichkeiten, wie andere bereits in ihrer Antwort erwähnt hatte, aber Easy Weg, den ich gefunden, um Thumbnail zu bekommen ist mit ExifInterface

ExifInterface exif = new ExifInterface(pictureFile.getPath());
byte[] imageData=exif.getThumbnail();
Bitmap  thumbnail= BitmapFactory.decodeByteArray(imageData,0,imageData.length);

5voto

uberchilly Punkte 150

Zwei Varianten ohne deprivierte Methoden.

 public String getThumbnailPath(Uri uri) {
    String[] proj = { MediaStore.Images.Media.DATA };

    // This method was deprecated in API level 11
    // Cursor cursor = managedQuery(contentUri, proj, null, null, null);

    CursorLoader cursorLoader = new CursorLoader(activity, uri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();

    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);

    cursor.moveToFirst();
    long imageId = cursor.getLong(column_index);
    //cursor.close();
    String result="";
    cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(activity.getContentResolver(), imageId,
            MediaStore.Images.Thumbnails.MINI_KIND, null);
    if (cursor != null && cursor.getCount() > 0) {
        cursor.moveToFirst();
        result = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
        cursor.close();
    }
    return result;
}
public Bitmap getThumbnailBitmap(Uri uri){
    String[] proj = { MediaStore.Images.Media.DATA };

    // This method was deprecated in API level 11
    // Cursor cursor = managedQuery(contentUri, proj, null, null, null);

    CursorLoader cursorLoader = new CursorLoader(activity, uri, proj, null, null, null);
    Cursor cursor = cursorLoader.loadInBackground();

    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);

    cursor.moveToFirst();
    long imageId = cursor.getLong(column_index);
    //cursor.close();

    Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(
            getContentResolver(), imageId,
            MediaStore.Images.Thumbnails.MINI_KIND,
            (BitmapFactory.Options) null );

    return bitmap;
}

4voto

Juan Sánchez Punkte 960

Basierend auf der Antwort von @Karan und den folgenden Kommentaren, nur für die Leute, die hier ankommen (so wie ich) und einen einsatzbereiten Code brauchen:

public String getThumbnailPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media._ID };
    String result = null;
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media._ID);

    cursor.moveToFirst();
    long imageId = cursor.getLong(column_index);
    cursor.close();

    cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(
            getContentResolver(), imageId,
            MediaStore.Images.Thumbnails.MINI_KIND,
            null);
    if (cursor != null && cursor.getCount() > 0) {
        cursor.moveToFirst();
        result = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
        cursor.close();
    }
    return result;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X