web-dev-qa-db-fra.com

android obtenir la vignette de l'image stockée sur une carte SD dont le chemin est connu

Supposons que j'ai une image stocke au chemin "/mnt/images/abc.jpg". Comment puis-je obtenir le bitmap miniature généré par le système pour cette image. Je sais comment obtenir la vignette d'une image de son Uri, mais pas de son chemin de fichier

16
pankajagarwal

Vous pouvez essayer avec ceci:

public static Bitmap getThumbnail(ContentResolver cr, String path) throws Exception {

    Cursor ca = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.MediaColumns._ID }, MediaStore.MediaColumns.DATA + "=?", new String[] {path}, null);
    if (ca != null && ca.moveToFirst()) {
        int id = ca.getInt(ca.getColumnIndex(MediaStore.MediaColumns._ID));
        ca.close();
        return MediaStore.Images.Thumbnails.getThumbnail(cr, id, MediaStore.Images.Thumbnails.MICRO_KIND, null );
    }

    ca.close();
    return null;

}
22
agirardello

C’est peut-être une autre façon que d’autres avaient déjà mentionnée dans leur réponse, mais il est facile de trouver la vignette en utilisant ExifInterface

    ExifInterface exif = new ExifInterface(pictureFile.getPath());
    byte[] imageData=exif.getThumbnail();
    if (imageData!=null) //it can not able to get the thumbnail for very small images , so better to check null
    Bitmap  thumbnail= BitmapFactory.decodeByteArray(imageData,0,imageData.length);
4
dharam

Vous pouvez obtenir la Uri à partir d'un fichier comme celui-ci:

Uri uri = Uri.fromFile(new File("/mnt/images/abc.jpg"));
Bitmap thumbnail = getPreview(uri);

Et la fonction suivante vous donne la vignette:

Bitmap getPreview(Uri uri) {
    File image = new File(uri.getPath());

    BitmapFactory.Options bounds = new BitmapFactory.Options();
    bounds.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(image.getPath(), bounds);
    if ((bounds.outWidth == -1) || (bounds.outHeight == -1))
        return null;

    int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight
            : bounds.outWidth;

    BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inSampleSize = originalSize / THUMBNAIL_SIZE;
    return BitmapFactory.decodeFile(image.getPath(), opts);     
}
4
Caner

Vous pouvez simplement créer une vidéo et une image miniatures à l'aide de la classe Java ThumnailUtil

Bitmap resized = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(file.getPath()), width, height);


 public static Bitmap createVideoThumbnail (String filePath, int kind)

Ajouté dans l’API niveau 8 Créer une miniature de vidéo pour une vidéo. Peut renvoyer la valeur null si la vidéo est corrompue ou si le format n'est pas pris en charge.

Paramètres FilePath Le chemin du fichier vidéo Peut être de type MINI_KIND ou MICRO_KIND.

Pour plus de code source de Thumbnail Util class

Developer.Android.com

2
sujith s

Utilisez Android Classe Bitmap et sa méthode createScaledBitmap .

méthode décrite:

public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)

exemple d'utilisation:

Bitmap bitmap = BitmapFactory.decodeFile(img_path);
int origWidth = bitmap.getWidth();
int origHeight = bitmap.getHeight();
bitmap = Bitmap.createScaledBitmap(bitmap, origWidth / 10, origHeight / 10, false);

diminue le fichier source comme vous le souhaitez. Dans mon exemple, je l'ai réduit 10 fois.

0
Yuliia Ashomok