【问题标题】:How to downsample images in a pdf (iOS)?如何对pdf(iOS)中的图像进行下采样?
【发布时间】:2012-05-12 12:33:22
【问题描述】:

我的问题类似于this one,只是我想在 iOS 中而不是 java 或命令行。

鉴于:我从我的包(或 Documents 目录或其他任何地方)读入了一个 pdf 文件。

  • 是否包含图片?
  • 如果是这样,它们的分辨率是多少?
  • 如果 > myMaxResolution,如何使用在 myMaxResolution 渲染的图像创建 PDF 视图?

例如:如果 pdf 是以 300dpi 扫描的一堆页面,我想以 72dpi 显示它们,我的目标是获得 17 倍的加速。

谢谢!

【问题讨论】:

    标签: ios pdf


    【解决方案1】:

    我假设您想要定义一个目标分辨率以支持包含太大而无法加载到 iOS 设备内存中的图像的文档(根据显示 PDF 页面的要求)?

    查看 Apple 示例代码项目 Large Image Downsizing。 您可以修改该示例以呈现 PDF 页面(而不是图像),同时受益于相同的增量下采样。您可以定义目标分辨率,并且永远不会尝试将整个源文档一次全部加载到内存中。相反,目标 PDF 呈现以增量方式“组装”,在您定义的目标分辨率下。无论源分辨率实际是什么,您都可以执行此操作。

    增量图像解码仅适用于 iOS 中的 TIFF、JPEG、PNG。但是,不支持 BMP、GIF、隔行扫描图像。在您的上下文中,这仅意味着如果您的 PDF 包含后一种类型的图像,它们将被完整解码到内存中,因此希望这些图像相对较小并且您的 PDF 中的大图像是前一种格式。

    如示例自述文件中所述,源 PDF 可以存在于应用程序包、照片卷或其他位置(例如下载的 OTA)中。

    此外,我修改了示例以支持 PDF。你可以download it here。 在我的测试中,目标 PDF 以正确的目标分辨率呈现,包括您所期望的任何文本、字形或矢量元素。

    【讨论】:

    • 我会看看你的例子,谢谢!问题不是“太大而无法加载到 iOS 设备内存中”,而是“CGPDFPageRender() (或其他任何名称)运行时间过长。我试图让页面以合理的数量呈现时间(我有一些每页需要几秒钟。)
    • 啊,我明白了。该示例可能对您的情况没有帮助,因为组装新文档可能需要更长的时间。你检查过 CGImageSourceCreateThumbnailAtIndex 吗?参考说明:“如果图像源是 PDF,则此函数会创建由您传递的索引指定的 PDF 页面的 72 dpi 图像。”我不知道它是否会比 CGPDF 函数更快,因为我相信它们在幕后由 ImageIO(CGImageSource 等)支持,但我认为值得一试。
    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2014-06-19
    相关资源
    最近更新 更多