【问题标题】:Check for Valid Image using getFilesAsync()使用 getFilesAsync() 检查有效图像
【发布时间】:2014-07-09 01:58:50
【问题描述】:

使用 WinJS,在遍历目录时,如何仅检索该特定目录中的图像并忽略任何其他文件扩展名,包括 DoubleDot .. 和 SingleDot . 等?

类似:

var dir = Windows.Storage.KnownFolders.picturesLibrary;

dir.getFilesAsync().done(function (filesFound) {

for(var i=0; i < filesFound.length; i++){}

       if(filesFound[i] IS_REALLY_AN_IMAGE_(jpeg,jpg,png,gif Only)){

       //Retrieve it now!

}else{
     //Escape it.
} 
}})

【问题讨论】:

    标签: png jpeg winjs gif getfiles


    【解决方案1】:

    与其尝试处理路径名,不如使用文件查询更好,它可以让文件系统为您进行搜索/过滤。如果您想动态跟踪文件夹内容而不是再次显式枚举,查询还允许您侦听查询的 contentschanged 事件。

    查询是通过 StorageFolder.createFileQuery、createFolderQuery 或其他变体创建的。在您想要按文件类型过滤的特定情况下,您可以使用createFileQueryWithOptions。此函数采用QueryOptions 对象,您可以使用文件类型数组对其进行初始化。例如:

    var picturesLibrary = Windows.Storage.KnownFolders.picturesLibrary;
    
    var options = new Windows.Storage.Search.QueryOptions(
        Windows.Storage.Search.CommonFileQuery.orderByName, [".jpg", ".jpeg", ".png", ".gif"]);
    
    //Could also use orderByDate instead of orderByName
    
    if (picturesLibrary.areQueryOptionsSupported(options)) {
        var query = picturesLibrary.createFileQueryWithOptions(options);
        showResults(query.getFilesAsync());
    }
    

    其中 showResults 是一些函数,它从 query.getFilesAsync 中获取承诺并根据需要进行迭代。

    我在我的免费电子书Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition 的第 11 章的“文件夹和文件夹查询”部分中详细讨论了这个主题。也可以参考Programmatic file search sample,就像我在书中所做的那样。

    当您想要显示图像文件时,请务必使用缩略图,而不是加载整个图像(图像通常比显示器大得多)。也就是说,对于每个StorageFile,调用其getThumbnailAsyncgetScaledImageAsThumbnailAsync 方法。将生成的 thumbnail (blob) 传递给 URL.createObjectURL,它会返回一个 URL,您可以将其分配给 img.src attribute。或者您可以使用WinJS.UI.ListView 控件,但这完全是另一个主题(请参阅我的书的第 7 章)。

    【讨论】:

    • 感谢您的洞察力。但是,您将如何以这种格式在 HTML &lt;div id="imageLand"&gt; 标记中显示这些图像,例如 '&lt;img src="THE_SOURCE_OF_THE_IMAGE" /&gt;'??.. 在 jQuery 我可以这样做:$('#imageLand').append('&lt;img src="THE_SOURCE_OF_THE_IMAGE" /&gt;') ... 如何使用您在 @ 中的解决方案来完成987654338@?....再次感谢
    • 对于每个StorageFile,调用其getThumbnailAsync或getScaledImageAsThumbnailAsync方法,比使用整个文件内容效率更高。将生成的缩略图 (blob) 传递给 URL.createObjectURL,它会返回一个您可以分配给 img.src 属性的 URL。或者您可以使用 WinJS.UI.ListView 控件,但这完全是另一个主题(请参阅我的书的第 7 章 :))
    • 太棒了!.. 闪耀着很多光芒。一个请求,您能否将此评论与您的​​答案结合起来以提高可读性?..再次非常感谢您!
    • 完成。顺便一提。我看到你也在 MSDN 论坛上问过这个问题。我将在那里发布相同的答案。
    • 再次感谢...我会将此标记为答案并在 MSDN 中执行相同操作...再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多