• android为视频、音乐、图片等生成缩略图


    1、Video
    对于视频,取第一帧作为缩略图,也就是怎样从filePath得到一个Bitmap对象。

    private Bitmap createVideoThumbnail(String filePath) {
    Bitmap bitmap
    = null;
    MediaMetadataRetriever retriever
    = new MediaMetadataRetriever();
    try {
    retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
    retriever.setDataSource(filePath);
    bitmap
    = retriever.captureFrame();
    }
    catch(IllegalArgumentException ex) {
    // Assume this is a corrupt video file
    } catch (RuntimeException ex) {
    // Assume this is a corrupt video file.
    } finally {
    try {
    retriever.release();
    }
    catch (RuntimeException ex) {
    // Ignore failures while cleaning up.
    }
    }
    return bitmap;
    }Android提供了MediaMetadataRetriever,由JNI(media_jni)实现。
    看得出MediaMetadataRetriever主要有两个功能:MODE_GET_METADATA_ONLY和MODE_CAPTURE_FRAME_ONLY
    这里设mode为MODE_CAPTURE_FRAME_ONLY,调用captureFrame取得一帧。
    另外还有两个方法可以用:
    extractMetadata 提取文件信息,ARTIST、DATE、YEAR、DURATION、RATING、FRAME_RATE、VIDEO_FORMAT
    和extractAlbumArt 提取专辑信息,这个下面的音乐文件可以用到。

    2、Music
    对于音乐,取得AlbumImage作为缩略图,还是用MediaMetadataRetriever

    private Bitmap createAlbumThumbnail(String filePath) {
    Bitmap bitmap
    = null;
    MediaMetadataRetriever retriever
    = new MediaMetadataRetriever();
    try {
    retriever.setMode(MediaMetadataRetriever.MODE_GET_METADATA_ONLY);
    retriever.setDataSource(filePath);
    byte[] art = retriever.extractAlbumArt();
    bitmap
    = BitmapFactory.decodeByteArray(art, 0, art.length);
    }
    catch(IllegalArgumentException ex) {
    }
    catch (RuntimeException ex) {
    }
    finally {
    try {
    retriever.release();
    }
    catch (RuntimeException ex) {
    // Ignore failures while cleaning up.
    }
    }
    return bitmap;
    }

    retriever.extractAlbumArt()得到的是byte数组,还需要一步用BitmapFactory编码得到Bitmap对象。

    3、Image
    图片就很简单了 Bitmap bm
    = null;

    Options op
    = new Options();

    op.inSampleSize
    = inSampleSize;

    op.inJustDecodeBounds
    = false;

    bm
    = BitmapFactory.decodeFile(mFile.getPath(), op);

    复制代码能直接得到Bitmap对象,把图片缩小到合适大小就OK。
    同样上面的Video和Music,retrive到Bitmap后也需要缩小处理。

  • 相关阅读:
    jeecg接口开发及权限实现原理
    Jeecg中通过Spring_AOP+注解方式实现日志的管理
    Jeecg踩坑不完全指南
    在jeecg中如何配置多对一和多对多的关系
    一致性哈希算法
    到底什么是哈希Hash?
    如何正确实现 Java 中的 HashCode
    Hash和HashCode深入理解
    关于源码
    MySQL存储过程的创建及调用
  • 原文地址:https://www.cnblogs.com/error404/p/2142971.html
Copyright © 2020-2023  润新知