Я пытаюсь получить изображение (высокое качество) каждой страницы 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
.
- Когда это выполняется, использование
memory is very high
.
- При подсчете страниц (количестве страниц) использование памяти очень и очень велико, иногда оно достигает значения
1.4 GB
, и приложение неожиданно вылетает с предупреждением: Terminate due to memory waring
. затем я попытался запустить код выше autoreleasepool
. это сработало, но когда использование памяти более высокое (когда оно близко к объему оперативной памяти), приложение снова вылетает с предупреждением выше.
Как я могу избежать этого предупреждения памяти и получить качественное изображение на странице PDF. надеюсь любая помощь. хорошего дня.