Swift如何通过CGContext压缩PDF大小,我将图像转换为PDF,但PDF大小太大

vuktfyat  于 2023-01-19  发布在  Swift
关注(0)|答案(1)|浏览(177)

我正在转换图像为PDF格式,并保存在文档目录中。图像大小是1 MB和PDF大小10MB。这是很难分享任何一个。需要你的帮助,压缩PDF文件时,我写的PDF文件在文档目录中。这是我的代码

func createPDF(image: UIImage) -> NSData? {
           let pdfData = NSMutableData()
           let pdfConsumer = CGDataConsumer(data: pdfData as CFMutableData)!
           var mediaBox = CGRect.init(x: 0, y: 0, width: image.size.width, height: image.size.height)
           let pdfContext = CGContext(consumer: pdfConsumer, mediaBox: &mediaBox, nil)!
           pdfContext.beginPage(mediaBox: &mediaBox)
           pdfContext.draw(image.cgImage!, in: mediaBox)
           pdfContext.endPage()
           return pdfData
       }
1cosmwyk

1cosmwyk1#

要在将PDF文件写入文档目录时对其进行压缩,可以使用CGContext方法setFlatness减少PDF文件中的细节量,这将减小文件大小。此外,可以使用CGContext方法setRenderingIntent调整PDF文件中图像的质量,这也有助于减小文件大小。
您可以按如下方式修改代码:

func createPDF(image: UIImage) -> NSData? {
    let pdfData = NSMutableData()
    let pdfConsumer = CGDataConsumer(data: pdfData as CFMutableData)!
    var mediaBox = CGRect.init(x: 0, y: 0, width: image.size.width, height: image.size.height)
    let pdfContext = CGContext(consumer: pdfConsumer, mediaBox: &mediaBox, nil)!
    pdfContext.beginPage(mediaBox: &mediaBox)
    pdfContext.setFlatness(0.1)
    pdfContext.setRenderingIntent(.defaultIntent)
    pdfContext.draw(image.cgImage!, in: mediaBox)
    pdfContext.endPage()
    return pdfData
}

您可以尝试使用setFlatness和setRenderingIntent值,以查看哪些设置最适合您的特定用例。

相关问题