SDWebImagePDFCoder
用途
SDWebImagePDFCoder 是一个用于 SDWebImage 框架的 PDF 编码器插件,它为 PDF 提供图像加载支持。PDF 渲染使用 Apple 内置框架(UIKit/AppKit/Core Graphics)完成。
示例
要运行示例项目,首先克隆仓库,然后从 Example 目录运行 pod install
。
您可以根据需要修改代码或使用其他 PDF 文件来检查兼容性。
需求
- iOS 9+
- tvOS 9+
- macOS 10.11+
- watchOS 2+
- Xcode 13+
安装
CocoaPods
SDWebImagePDFCoder可以通过CocoaPods使用。要安装它,只需将以下行添加到您的Podfile中
pod 'SDWebImagePDFCoder'
Carthage
SDWebImagePDFCoder可以通过Carthage使用。
github "SDWebImage/SDWebImagePDFCoder"
Swift Package Manager (Xcode 11+)
SDWebImagePDFCoder可以通过Swift Package Manager使用。
let package = Package(
dependencies: [
.package(url: "https://github.com/SDWebImage/SDWebImagePDFCoder.git", from: "1.0")
]
)
使用方法
要使用PDF编码器,首先应将SDImagePDFCoder
添加到编码器管理器中。然后可以调用视图分类方法来开始加载PDF图像。
使用UIImageView矢量渲染(iOS/tvOS 11+,Mac)
重要:苹果从iOS/tvOS 11+开始为UIKit添加了PDF格式的内置矢量图像支持。这意味着您可以使用PDF数据创建一个UIImage
,并将其设置为UIImageView
。当imageView的边界/内容模式发生变化时,PDF图像也会进行缩放,而不会丢失任何细节。您还可以使用支持PDF图像的Xcode资产目录中的+[UIImage imageNamed:]
,记得打开Preserve Vector Data
。
对于macOS用户,从第一天起就支持NSImage
/NSImageView
和PDF图像。像平常一样使用它。
- Objective-C
SDImagePDFCoder *PDFCoder = [SDImagePDFCoder sharedCoder];
[[SDImageCodersManager sharedManager] addCoder:PDFCoder];
UIImageView *imageView;
[imageView sd_setImageWithURL:url];
- Swift
let PDFCoder = SDImagePDFCoder.shared
SDImageCodersManager.shared.addCoder(PDFCoder)
let imageView: UIImageView
imageView.sd_setImage(with: url)
使用UIImageView位图渲染(iOS/tvOS 10-)
对于低于iOS/tvOS 11+的固件,UIImage
与UIImageView
不支持矢量图形渲染。即使您在Xcode资产目录中添加PDF图像,但也只是编码成位图PNG格式,不支持运行时缩放。
对于UIImageView
,我们只解析具有固定图像大小的PDF(来自PDF的媒体框信息)。但我们还支持您在加载图像时使用.imageThumbnailPixelSize
上下文选项指定所需大小。您还可以使用.imagePreserveAspectRatio
上下文选项指定是否在缩放时保持纵横比。
注意:一旦您传入像素大小,kra将在iOS/tvOS 11+上始终生成位图表示。如果您想要矢量格式,不要传递它们,让UIImageView
动态拉伸PDF。
- Objective-C
SDImagePDFCoder *PDFCoder = [SDImagePDFCoder sharedCoder];
[[SDImageCodersManager sharedManager] addCoder:PDFCoder];
UIImageView *imageView;
CGSize bitmapSize = CGSizeMake(500, 500);
[imageView sd_setImageWithURL:url placeholderImage:nil options:0 context:@{SDWebImageContextImageThumbnailPixelSize : @(bitmapSize)];
- Swift
let PDFCoder = SDImagePDFCoder.shared
SDImageCodersManager.shared.addCoder(PDFCoder)
let imageView: UIImageView
let bitmapSize = CGSize(width: 500, height: 500)
imageView.sd_setImage(with: url, placeholderImage: nil, options: [], context: [.imageThumbnailPixelSize : bitmapSize])
导出PDF数据
SDWebImagePDFCoder
提供了一种简单的方式来导出框架生成的PDF图像,到原始PDF数据。
如果输入图像已经是基于矢量的PDF,将直接导出该PDF(快速)。否则,我们将在空PDF页上绘制位图图像,这是一个较慢的过程。
- Objective-C
UIImage *pdfImage; // UIImage with vector image, or NSImage contains `NSPDFImageRep`
NSData *pdfData = [pdfImage sd_imageDataAsFormat:SDImageFormatPDF]; // May return the vector data, or create new PDF with current image drawn on
- Swift
let pdfImage: UIImage // UIImage with vector image, or NSImage contains `NSPDFImageRep`
let pdfData = pdfImage.sd_imageData(as: .PDF) // May return the vector data, or create new PDF with current image drawn on
截图
这些PDF图像来自icons8,您也可以尝试使用您自己的PDF图像进行demo。
作者
DreamPiggy
许可证
SDWebImagePDFCoder遵循MIT许可证。有关更多信息,请参阅LICENSE文件。