首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDFPage的分辨率?

PDFPage的分辨率?
EN

Stack Overflow用户
提问于 2010-08-11 18:34:45
回答 1查看 574关注 0票数 0

我有一个PDF文档,它是通过创建大小为72 has的NSImages创建的,每个文档都有一个以像素为单位的表示。然后,我使用PDFPages将这些图像与initWithImage放在一起,然后保存文档。

当我打开文档时,我需要原始图像的分辨率。然而,PDFPage给我的所有矩形都是以点而不是像素来测量的。

我知道信息在那里,我想我可以尝试自己解析PDF数据,通过查看voyeur.app示例.但要做一些应该很正常的事是很费劲的.

有更简单的方法吗?

添加:

我尝试过两种技巧:

  1. 从页面中获取PDFRepresentation数据,并使用它通过initWithData创建一个新的NSImage。但是,图像的大小和像素大小都是72 get,
  2. 将PDFPage绘制到一个新的屏幕外上下文中,然后从该上下文中获得CGImage。问题是,当我创建上下文时,我似乎已经需要知道以像素为单位的大小,这违背了目的的一部分.
EN

回答 1

Stack Overflow用户

发布于 2010-08-18 15:41:37

关于PDF,您需要了解以下几点:

  • PDF坐标系默认为点(1/72英寸),
  • 坐标系没有分辨率。(这是一个白色的谎言-实际上是32位浮点numbers).
  • Images的限制- PDF格式中的32位浮点JPEG2000本身并没有任何分辨率附在上面(这是一个白色的谎言-用JPEG2000压缩的图像仍然在其嵌入的元数据中具有分辨率)。
  • ( PDF格式的图像)用一个包含使用压缩过滤器存储的一系列样本的对象来表示。
  • 图像对象可以在页面上以任意大小多次呈现。

由于分辨率被定义为每单位距离的像素数(或样本数),分辨率仅意味着页面上图像的特定呈现。因此,如果您呈现一个特定的图像来填充页面,那么dpi中的分辨率是

代码语言:javascript
复制
xdpi = image_width / (pageWidthInPoints / 72.0);
ydpi = image_height / (pageHeightInPoints / 72.0);

如果图像没有呈现到页面的全部大小,那么完整的解决方案是非常棘手的。Adobe规定图像应该被视为1x1,并且更改页面转换矩阵以确定如何呈现它们。这意味着在渲染图像时需要矩阵,并且需要将点(0,0),(0,1),(1,0)通过矩阵。(0,0)‘和(1,0)’之间的欧几里德距离给出了点的宽度,(0,0)‘和(0,1)’之间的欧几里德距离给出了点的高度。

那你是怎么得到矩阵的?那么,您需要页面的内容流,并且需要编写一个PDF解释器,该解释器可以撕毁内容流并跟踪CTM的更改。当你到达你的图像,你为它提取CTM。

要做到这一点,最后一步应该是使用一个像样的PDF工具包大约一个小时,前提是您熟悉这个工具包。编写这个工具包是几个人多年的工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3461659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档