Экспорт PDF выглядит хуже, чем обработанные изображения (текст получает «дырки»)IOS

Программируем под IOS
Anonymous
Экспорт PDF выглядит хуже, чем обработанные изображения (текст получает «дырки»)

Сообщение Anonymous »

Экспорт в PDF выглядит хуже, чем обработанные изображения (текст становится «дырочным»). Как встроить растр 1:1?
У меня есть конвейер iOS, который создает четкие бинаризованные изображения в оттенках серого (Otsu/адаптивный; небольшой контраст/гамма). Сохранение PNG/JPEG выглядит великолепно. Но при встраивании того же растра в PDF тонкий текст приобретает неровности или «белые дыры», особенно при масштабировании 100–150 % (Preview/PDFKit).
iOS 17, Swift 5.9. Только растр (без векторного текста). PDF через UIGraphicsPDFRenderer и Core Graphics.
Минимальный код:

Код: Выделить всё

func pageSizePts(pixels: CGSize, dpi: CGFloat) -> CGSize {
CGSize(width: pixels.width * 72/dpi, height: pixels.height * 72/dpi)
}

func makePDF(from img: CGImage, dpi: CGFloat = 300, to url: URL) throws {
let size = pageSizePts(pixels: .init(width: img.width, height: img.height), dpi: dpi)
let renderer = UIGraphicsPDFRenderer(bounds: .init(origin: .zero, size: size))
try renderer.writePDF(to: url) { ctx in
ctx.beginPage()
let cg = UIGraphicsGetCurrentContext()!
cg.interpolationQuality = .none
cg.setShouldAntialias(false)
cg.draw(img, in: .init(origin: .zero, size: size)) // 1:1 at chosen DPI
}
}
Проверено (без изменений):
  • vs .high интерполяция; включение/выключение сглаживания
  • Предварительное масштабирование с помощью vImage (повторная выборка HQ) до точного целевого размера.
  • Оттенки серого, 8 бит против явного 1-битного CGImage (надеюсь на CCITT)
  • Базовая графика PDF с kCGPDFContextCompressionLevel 0–9
Вопросы:
  • Как встроить растровые страницы в PDF без скрытого повторного сжатия/повторной выборки на iOS? Могу ли я принудительно использовать Flate (8 бит) или CCITT G4 (1 бит) вместо JPEG?
  • Достаточно ли моего отображения 1:1 (

    Код: Выделить всё

    points = pixels * 72/dpi
    ) или есть ли другой способ избежать размытия при просмотре?
  • Известные особенности просмотра PDF-файлов в macOS/iOS, которые вызывают появление таких «дыр», и рекомендуемые меры по их устранению?


Подробнее здесь: https://stackoverflow.com/questions/798 ... gets-holes

Вернуться в «IOS»