【发布时间】:2010-09-22 13:05:26
【问题描述】:
我必须将 PDF 渲染成非常高分辨率的图像(比如高达甚至超过 100,000 * 80,000 像素)。
我设法做到这一点,通过将渲染分成几个切片然后使用 NSOperationQueue 渲染每个切片,基本上使用 drawInRect:fromRect:operation:fraction: 将 NSImage pdf 表示绘制到一个新的 NSImage 中,然后保存TIFFRepresentation 到文件中。
一切都很好,多核和快速,我几乎很高兴。 无论如何,我需要在渲染它们之后再次加入这些切片,以获得单个 TIFF 文件。
我会尝试使用 NSInputStream 和 NSOutputStream 合并文件,但由于每个文件都是完整的 tiff 表示,将原始字节合并在一起会导致无法读取的图片文件。 有没有办法将图像文件合并在一起而不将它们完全加载到内存中,即不使用 NSImage 方法?
否则我可以保存原始像素字节而不是 tiff 表示,然后将它们与 NSInputStream/NSOutputStream 连接,但是我如何才能将整个字节文件转换为可识别的 TIFF 而无需再次将巨大的东西加载到 ram 中?
【问题讨论】:
-
我很好奇您为什么需要这么大的图像 - 什么样的 PDF 可以包含这么多信息?另一种选择是使用我在下面概述的技术提取低于所需分辨率(100MB - 1GB 未压缩)的图像,然后使用一些照片编辑应用程序将其缩放到更大的尺寸。这可能会给您几乎相同的图像。我很想听听您的应用程序是什么!
-
该应用程序是关于将矢量图形光栅化为非常大的位图以创建高分辨率壁纸大小的打印件。印刷厂需要 tiff 图像,无法直接处理矢量图形。不过,它必须在编码中完成,使用 Cocoa API,而不是手动完成。
标签: cocoa rendering nsimage nsinputstream