- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试获取每个 pdf 页面的图像(高质量)。我正在使用下面的代码通过 for 循环运行直到页面计数并且它有效。
guard let document = CGPDFDocument(pdfurl as CFURL) else { return }
guard let page = document.page(at: i) else { return }
let dpi: CGFloat = 300.0/72.0
let pagerect = page.getBoxRect(.mediaBox)
print(pagebounds)
print(pagerect)
let render = UIGraphicsImageRenderer(size: CGSize(width: pagerect.size.width * dpi, height: pagerect.size.height * dpi))
let imagedata = render.jpegData(withCompressionQuality: 0.5, actions: { cnv in
UIColor.white.set()
cnv.fill(pagerect)
cnv.cgContext.translateBy(x: 0.0, y: pagerect.size.height * dpi)
cnv.cgContext.scaleBy(x: dpi, y: -dpi)
cnv.cgContext.drawPDFPage(page)
})
let image = UIImage(data: imagedata)
我遇到了以下问题......
image
是 nil
。内存使用率非常高
。1.4 GB
,突然应用程序崩溃并显示警告:Terminate due内存警告
。然后我尝试在 autoreleasepool
中运行上面的代码。它确实有效,但是当内存使用率更高时(当它接近 RAM 大小时),应用程序再次崩溃并显示上述警告。如何避免此内存警告并从 pdf 页面获取高质量图像。希望有帮助。祝你有美好的一天。
最佳答案
如果您遇到此问题,请尝试以下操作:
autoreleasepool {
guard let page = document.page(at: i) else { return }
// Fetch the page rect for the page we want to render.
let pageRect = page.getBoxRect(.mediaBox)
var dpi: CGFloat = 1.0
if pageRect.size.width > pageRect.size.height {
dpi = 3508.0 / pageRect.size.width
} else {
dpi = 3508.0 / pageRect.size.height
}
//dpi = 300
let format = UIGraphicsImageRendererFormat()
format.scale = 1
let renderer = UIGraphicsImageRenderer(size: CGSize(width: pageRect.size.width * dpi, height: pageRect.size.height * dpi), format: format)
let imagedata = renderer.jpegData(withCompressionQuality: 1.0, actions: { cnv in
UIColor.white.set()
cnv.fill(pageRect)
cnv.cgContext.translateBy(x: 0.0, y: pageRect.size.height * dpi)
cnv.cgContext.scaleBy(x: dpi, y: -dpi)
cnv.cgContext.drawPDFPage(page)
})
let image = UIImage(data: imagedata)
}
autoreleasepool - 用于永久内存清除
缩放 - 这样就不会为不同的设备创建图像,这会将它们的分辨率提高 2 或 3 倍
更改了增加 dpi 的方式,因为它最初可以大于或小于 72
关于ios - 为什么应用程序在将 pdf 页面转换为 ios 中的高质量图像时由于内存警告而终止,在真实设备中 swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56072991/
我面临以下问题:我有几个 UIImage(不是方形的),我需要调整它们的大小并裁剪它们。我已经阅读了关于 StackOverflow 的几乎所有问题,但我得到的结果并不好,我的意思是生成的图像质量很差
在查看了一些服务/工具之后,我得出了一个结论。大多数 Text-to-Speech 工具的技术含量太高、太机械化——换句话说,就是质量差的 c 语音。 是的,最重要的是,看起来它们带有“硬编码”语音模
我一直用pgfplot的 latex生成数字(.pdf 格式)。现在,我想发表的期刊希望我的数字为 eps 格式。 我尝试使用 pdftops -eps fig.pdf fig.eps 将 pdf 转
我有一个问题,我一直无法弄清楚。我有一个应用程序可以从正面和背面相机拍摄一张照片,然后将它们合并在一起。 应用的名称是GroupCam 但是我有一个问题,我的 UIButtons 从一开始就不会作为
我有兴趣创建一个非常简单、高质量(加密)的随 secret 码生成器。有没有更好的方法来做到这一点? import os, random, string length = 13 chars = str
我正在尝试通过 Imagick 将 PDF 转换为高质量的 PNG,但文件总是模糊不清。目前,我正在运行以下选项,但找不到正确的标志来从转换中获得清晰的 PNG。原始 PDF 文件为 8.5 x 11
当我运行这个程序时,图像将转换为 pdf,但给定的输出 pdf 与图像不匹配,因为它被裁剪了。我使用 iText 库。 import java.io.FileOutputStream;
simple 之间有什么区别? , highQuality和 balanced textBreakStrategy 的值的属性(property)React Native 中的组件? document
高质量的图像还需要下载(从 Firebase)并显示,一旦我们滚动并且图像超出屏幕,然后 feed 恢复正常,也会使 feed 缓慢且滞后 https://pastebin.com/ibcaGzVH这
我使用 FabricJs 在 Canvas 上创建了一个带有一些图片和文本的设计 (270x470),然后我通过 fabricJS 的 canvas.toJSON() 方法以 JSON 格式导出所有图
我是一名优秀的程序员,十分优秀!