【问题标题】:Given a full path of an image file, how to get its thumbnail?给定图像文件的完整路径,如何获取其缩略图?
【发布时间】:2013-09-27 16:36:19
【问题描述】:

似乎我在网上搜索的答案(包括stackoverflow.com)通过图库选择获得了图像文件ID。

我创建了自己的文件浏览器。 那该怎么做呢?

我可以创建自己的小尺寸图像;但我认为如果我们可以利用现有的缩略图会更快;如果它不存在,我更愿意创建一个缩略图以供以后使用。

[更新:] 好的,谢谢建议。所以我不会在设备中创建缩略图,以免占用太多空间。 然后最好做两个步骤: 第 1 步:查找图像文件的现有缩略图(如果存在)。 第二步:如果不存在缩略图,则创建我自己的小尺寸位图(不保存)。

如果我不使用 Gallery Intent,那么如何执行第 1 步?

[更新 2:] 我还想获取视频文件的缩略图。 我可以使用 MediaMetadataRetriever 在任何时间点获取帧,并将图像重新缩放为缩略图。但是我发现它很慢:我的文件夹中有4个视频文件,我可以感觉到延迟。

所以我认为检索现有缩略图的更好方法。 如果我只知道文件路径和文件名,我怎么能得到呢? 我认为这个问题和我原来的问题一样,只是这样做更有意义。

【问题讨论】:

    标签: android android-image


    【解决方案1】:

    您不应该为缩略图使用特定文件,尤其是不要创建缩略图。如果用户有很多图像并且您存储了在您的资源管理器中查看的每张图片的缩略图怎么办。这会产生大量重复和不需要的数据。每次调整图像大小的计算都超过了需要存储的数据量。

    我建议您在资源管理器中的图像上设置一个默认图标,然后在不同的线程中调整图像的大小,在调整大小时替换您的默认缩略图。

    【讨论】:

    • 感谢您的建议。如果我想使用现有的缩略图(如果存在),可以吗?
    • 我真的不明白这怎么可能,Java 通常对检索有关文件的详细信息的支持很差。即使在计算机上,获取缩略图等信息也可能很棘手。
    【解决方案2】:

    您可以即时缩小现有图像的大小:

    BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inJustDecodeBounds = true;
    
    BitmapFactory.decodeFile(image_path, opts);
    int width = opts.outWidth;
    int height = opts.outHeight;
    

    然后

    opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
    opts.inDither = true;
    opts.inJustDecodeBounds = false;
    
    opts.inSampleSize = (int)Math.pow(2.0,Math.floor(Math.log(scale_factor)/Math.log(2)));//for example double scale_factor=(double)width/desired_dimension;
    

    最后:

    Bitmap bm = BitmapFactory.decodeFile(image_path,opts);
    

    您可以加载现有文件的单独线程范围,并在需要时仅更新那些文件。

    【讨论】:

    • 谢谢。我知道如何创建一个小尺寸的位图。我只是认为如果存在的话,使用现有的缩略图可能会更好?当我不使用图库 Intent 时是否可以检索它?
    【解决方案3】:

    您可以使用 ThumbnailUtils。查找此实用程序方法。可能很容易满足您的需要。创建重复的缩小图像是一个糟糕的设计,因为它最终会产生不必要的数据。

    Bitmap resizedImage = ThumbnailUtils.extractThumbnail(rescaledImage, imagePixel, imagePixel);
    

    【讨论】:

    • 我个人认为,如果我首先得到一个“rescaledImage”的位图(我需要调整它的大小,因为许多原始图像都有很大的尺寸),然后使用 extractThumbnail 来获得更小的尺寸,我会这样做Eudhan 建议的一步。
    • 好吧..您不需要重新缩放的图像。您可以在其中放入任何您想要的图像,然后给它一个高度和宽度......您将获得该图像。这段代码是我的,我没有改变变量就是这样
    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2013-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    相关资源
    最近更新 更多