SDWebImagePDFCoder 1.0.1

SDWebImagePDFCoder 1.0.1

DreamPiggyBogdan Poplauschi维护。



  • DreamPiggy

SDWebImagePDFCoder

CI Status Version License Platform Carthage compatible SwiftPM compatible

用途

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+的固件,UIImageUIImageView不支持矢量图形渲染。即使您在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文件。