iOS为本地文件生成预览图

几乎在所有的文件系统中,预览图或者缩略图都是很常见的,可以帮用户快速识别文件内容。

在iOS系统的文件app,也能看到各种常见文件的预览图,比如图片类、视频类、文档类、文本类 等。

当我们的应用需要展示本地预览图时改如何实现呢?

通过查阅Apple开发文档可知,在iOS13+,Apple为我们提供了实用QuickLook框架生成缩略图的功能,阅读开发文档不难实现这个功能。

这里使用OC代码演示:

首先需要导入头文件

#import

然后根据本地路径,要生成的尺寸,创建生成缩略图请求

QLThumbnailGenerationRequest *request =  [[QLThumbnailGenerationRequest alloc] initWithFileAtURL:fileURL size:size scale:UIScreen.mainScreen.scale representationTypes:QLThumbnailGenerationRequestRepresentationTypeThumbnail];

使用缩略图生成器单例对象,生成缩略图

[QLThumbnailGenerator.sharedGenerator generateRepresentationsForRequest:request updateHandler:^(QLThumbnailRepresentation * _Nullable thumbnail, QLThumbnailRepresentationType type, NSError * _Nullable error) {
              // thumbnail.UIImage
 }];

其中需要注意的是:类型

请求时的类型:QLThumbnailGenerationRequestRepresentationTypes

QLThumbnailGenerationRequestRepresentationTypeAll 所有类型
QLThumbnailGenerationRequestRepresentationTypeIcon = 1 << 0 文件类型icon
QLThumbnailGenerationRequestRepresentationTypeLowQualityThumbnail = 1 << 1 低质量缩略图
QLThumbnailGenerationRequestRepresentationTypeThumbnail = 1 << 2 缩略图

结果中可以缩略图类型,以及对应的UIImage,NSImage,CGImage ,可以根据需要使用。

如果系统不支持图片返回nil,如果出错可以检查错误。


除了使用系统API来生成预览图,也可以直接通过SDWebImage来生成缩略图

// 注意,API用的是像素,我们一般要乘以scale
CGSize thumbnailSize = CGSizeMake(24 * UIScreen.mainScreen.scale, 24 * UIScreen.mainScreen.scale);
NSURL *fileURL = ...;
[self.iconImageView sd_setImageWithURL:fileURL placeholderImage:[UIImage imageNamed:model.fileImgStr] options:0 context:@{SDWebImageContextImageThumbnailPixelSize : @(thumbnailSize)}];

当然支持的类型可能没有系统的多,比如无法对文本文件、PDF等文件生成预览图。

你可能感兴趣的:(iOS为本地文件生成预览图)