【问题标题】:Mac Quick Look Preview in an NSView or NSImage?NSView 或 NSImage 中的 Mac 快速查看预览?
【发布时间】:2010-01-30 21:45:16
【问题描述】:

我正在寻找一种方法(公共或其他方式)来获取显示文件 QuickLook 预览 的 NSView、NSImage、CGImageRef 等。本质上相当于 QLThumbnailImageCreate() 但用于预览。

我能找到的公共 API 不支持这个。它们允许创建缩略图图像或 QLPreviewPanel。该面板确实显示了快速查看预览,但我无法访问预览的外观以将其嵌入到其他视图中,也无法一次显示多个预览。

作为背景,我正在编写一个应用程序,用户可以在其中嵌入指向应该内联显示的其他文件的链接,有点像 HTML 中的 标记。对于 JPG 和 PDF 等图像,很容易确定要显示的内容。我认为对于其他格式,我会使用 Quick Look 来生成文件内容的良好视觉表示。这样,我的应用程序支持的格式集就可以轻松扩展(只需下载新的 Quick Look 生成器)。

【问题讨论】:

    标签: cocoa macos quicklook


    【解决方案1】:

    我前段时间对此进行了广泛的研究,但无法找到一种简单的方法来做到这一点。根据文件的类型,QuickLook 会生成不同类型的输出。例如,对于 iWork 文件,生成器生成在 WebView 中显示的 HTML。对于其他类型,它返回不同类型的数据。

    我从未最终使用过该代码,但这里有一些我挖出来的代码和一些可能很方便的私有 API:

    id QLPreviewCreate(CFAllocatorRef allocator, CFURLRef url,  CFDictionaryRef options);
    id QLPreviewCopyBitmapImage(id preview);
    id QLPreviewCopyData(id preview);
    NSString* QLPreviewGetPreviewType(id preview);
    id QLPreviewCopyProperties(id preview);
    
    - (NSData *)getDataForFile:(NSString *)path
    {
    
        NSURL *fileURL = [NSURL fileURLWithPath:path];
    
        id preview = QLPreviewCreate(kCFAllocatorDefault, fileURL, 0);
    
        if (preview)
        {
            NSString* previewType = QLPreviewGetPreviewType(preview);
    
            if ([previewType isEqualToString:@"public.webcontent"])
            {
                // this preview is HTML data
                return QLPreviewCopyData(preview);
            }
            else
            {
               NSLog(@"this type is: %@", previewType);
               // do something else
            }
    
        }
    
        return nil;
    }
    

    【讨论】:

    • 您可能还想从 Matt Gemmell 那里检查一下:mattgemmell.com/2007/10/29/… 它使用 QLThumbnailImageCreate 来创建预览(甚至很大)。如果我没记错的话,我遇到的问题是它只适用于首页文档。
    • 尽管代码的标题来自 Matt Gemmell,但实际上它只返回缩略图,而不是预览。
    • 感谢私有 API……这些看起来很有用。我认为唯一可行的方法是找到给定文件的生成器包,然后扮演 QL 面板的角色,根据需要接受 HTML、图像等。似乎可以通过足够的黑客攻击,但如果 Apple 做出改变,这不是微不足道的,也不是特别强大。
    • 如果您使用我列出的 API,则不需要直接使用生成器。如果你有任何运气,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2015-03-29
    相关资源
    最近更新 更多