Экспорт 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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