Android получить эскиз изображения, хранящегося на SDCard, путь которого известен - PullRequest
16 голосов
/ 05 декабря 2011

Скажите, что у меня есть изображение, хранящееся по пути "/mnt/images/abc.jpg". Как получить сгенерированную системой растровое изображение для этого изображения. Я знаю, как получить эскиз изображения из его Uri, но не из его пути к файлу

Ответы [ 5 ]

24 голосов
/ 14 марта 2013

Вы можете попробовать это:

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;

}
4 голосов
/ 28 мая 2014

Это может быть альтернативный способ, как другие уже упоминали в своем ответе, но я нашел простой способ получить миниатюру, используя 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 голосов
/ 05 декабря 2011

Вы можете получить Uri из файла, подобного этому:

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

И следующая функция дает вам миниатюру:

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);     
}
2 голосов
/ 01 апреля 2015

Вы можете просто создать миниатюру видео и изображения, используя класс java ThumnailUtil

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


 public static Bitmap createVideoThumbnail (String filePath, int kind)

Добавлен на уровне API 8 Создайте миниатюру видео для видео.Может возвращать ноль, если видео повреждено или формат не поддерживается.

Параметры filePath Путь к типу видеофайла может быть MINI_KIND или MICRO_KIND

Для получения дополнительной информации Исходный код Thumbnail Utilкласс

Developer.android.com

0 голосов
/ 14 декабря 2015

Использование android Класс растрового изображения и его метод createScaledBitmap .

метод дескрипции:

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

пример использования:

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

уменьшить исходный файл так, как вы хотите. В моем примере я уменьшил его в 10 раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...