根据UIImage.init(with: Data)的文档和数据参数:
数据参数中的数据必须经过格式化才能与系统所支持的图像类型之一的文件格式相匹配。
我假设在将UIImage数据传递到init时可以初始化iOS (因为iOS支持PDF向量资产),但不幸的是,我从这个init中获得了nil。我是不是做错了什么,还是不可能使用PDF作为远程资产?
我在本地没有这个PDF数据,它是从后端获取的.
发布于 2019-06-18 15:21:51
利用杰克的反应,我找到了实现我所需要的只是作为参数传递数据的方法,而不是像杰克的答案那样的url。
UIImage的完整扩展:
import UIKit
import PDFKit
import CoreGraphics
extension UIImage {
public static func fromPDF(data: Data) -> UIImage? {
guard
let pdf = PDFDocument(data: data),
let pdfPage = pdf.page(at: 0),
let pageRef = pdfPage.pageRef
else { return nil }
let pageRect = pageRef.getBoxRect(.mediaBox)
let renderer = UIGraphicsImageRenderer(size: pageRect.size)
let img = renderer.image { ctx in
UIColor.clear.set()
ctx.fill(pageRect)
ctx.cgContext.translateBy(x: 0.0, y: pageRect.size.height)
ctx.cgContext.scaleBy(x: 1.0, y: -1.0)
ctx.cgContext.drawPDFPage(pageRef)
}
return img
}
}发布于 2019-06-16 13:22:15
我认为您需要对此使用UIGraphicsImageRenderer或ImageContext。对于前者(iOS >10),您可以在这里尝试以下代码:
func drawPDFfromURL(url: URL) -> UIImage? {
guard let document = CGPDFDocument(url as CFURL) else { return nil }
// First page of the document.
guard let page = document.page(at: 1) else { return nil }
let pageRect = page.getBoxRect(.mediaBox)
let renderer = UIGraphicsImageRenderer(size: pageRect.size)
let img = renderer.image { ctx in
UIColor.white.set()
ctx.fill(pageRect)
ctx.cgContext.translateBy(x: 0.0, y: pageRect.size.height)
ctx.cgContext.scaleBy(x: 1.0, y: -1.0)
ctx.cgContext.drawPDFPage(page)
}
return img
}希望这能有所帮助。
https://stackoverflow.com/questions/56617800
复制相似问题