首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用PDF远程数据初始化UIImage?

是否可以使用PDF远程数据初始化UIImage?
EN

Stack Overflow用户
提问于 2019-06-16 10:01:26
回答 2查看 537关注 0票数 1

根据UIImage.init(with: Data)的文档和数据参数:

数据参数中的数据必须经过格式化才能与系统所支持的图像类型之一的文件格式相匹配。

我假设在将UIImage数据传递到init时可以初始化iOS (因为iOS支持PDF向量资产),但不幸的是,我从这个init中获得了nil。我是不是做错了什么,还是不可能使用PDF作为远程资产?

我在本地没有这个PDF数据,它是从后端获取的.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-18 15:21:51

利用杰克的反应,我找到了实现我所需要的只是作为参数传递数据的方法,而不是像杰克的答案那样的url。

UIImage的完整扩展:

代码语言:javascript
复制
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
    }
}
票数 1
EN

Stack Overflow用户

发布于 2019-06-16 13:22:15

我认为您需要对此使用UIGraphicsImageRendererImageContext。对于前者(iOS >10),您可以在这里尝试以下代码:

代码语言:javascript
复制
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
}

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56617800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档