答案 0 :(得分:10)
看看你的另一个问题的答案:
基本上,您现在可以为Poppler的-list
命令行实用程序使用(新)pdfimages
参数(它将 NOT 用于XPDF的版本pdfimages
!)。
它将报告查询页面上出现的每个图像的尺寸。
(您也可以使用它从PDF中提取图像:pdfimages -png -f 3 -l 5 some.pdf prefix---
将从PDF文件中提取所有图像为PNG,从 f 第一页开始3,以 l ast第5页结尾,每个图像都使用prefix---
的文件名前缀。但这个问题似乎不是你问题的主要焦点...) 子>
pdfimages -list -f 1 -l 3 /Users/kurtpfeifle/Downloads/ct-magazin-14-2012.pdf page num type width height color comp bpc enc interp object ID --------------------------------------------------------------------- 1 0 image 1247 1738 rgb 3 8 jpx no 3053 0 2 1 image 582 839 gray 1 8 jpeg no 2080 0 2 2 image 344 364 gray 1 8 jpx no 2079 0 3 3 image 581 838 rgb 3 8 jpeg no 7 0 3 4 image 1088 776 rgb 3 8 jpx no 8 0 3 5 image 6 6 rgb 3 8 image no 9 0 3 6 image 8 6 rgb 3 8 image no 10 0 3 7 image 4 6 rgb 3 8 image no 11 0 3 8 image 212 106 rgb 3 8 jpx no 12 0 3 9 image 150 68 rgb 3 8 jpx no 13 0 3 10 image 6 6 rgb 3 8 image no 14 0 3 11 image 4 4 rgb 3 8 image no 15 0
它不会直接报告DPI分辨率 - 但是从“宽度”和“高度”尺寸可以轻松计算:用英寸标尺测量屏幕上图片的宽度然后除以'宽度像素'由测量的标尺数...
你觉得这很奇怪,因为结果取决于你当前的缩放级别?是的,它是!
“解决方案”的概念始终取决于环境。所谓的“高分辨率”图片在宽度和高度上基本上总是有很多像素。如果需要以更高的缩放级别显示或打印图片,则可以获得更好的质量(或“分辨率”)。
同时有一个新版本的(Poppler's)pdfimages
:
$ pdfimages -version
pdfimages version 0.33.0
[....]
这也报告了嵌入图像的分辨率,PPI(每英寸像素数),水平(x-ppi
)和垂直(y-ppi
)方向:
page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio
-------------------------------------------------------------------------------------
1 0 image 1247 1738 rgb 3 8 jpx no 3053 0 151 151 228K 3.6%
2 1 image 582 839 gray 1 8 jpeg no 2080 0 72 72 319B 0.1%
2 2 image 344 364 gray 1 8 jpx no 2079 0 150 150 4325B 3.5%
3 3 image 581 838 rgb 3 8 jpeg no 7 0 73 73 1980B 0.1%
3 4 image 1088 776 rgb 3 8 jpx no 8 0 150 151 106K 4.3%
3 5 image 6 6 rgb 3 8 image no 9 0 150 150 108B 100%
3 6 image 8 6 rgb 3 8 image no 10 0 150 150 158B 110%
3 7 image 4 6 rgb 3 8 image no 11 0 150 150 73B 101%
3 8 image 212 106 rgb 3 8 jpx no 12 0 150 150 2396B 3.6%
3 9 image 150 68 rgb 3 8 jpx no 13 0 150 150 1878B 6.1%
3 10 image 6 6 rgb 3 8 image no 14 0 150 150 81B 75%
3 11 image 4 4 rgb 3 8 image no 15 0 150 150 50B 104%
这项新功能首先出现在Poppler 0.25版本(2013年12月11日星期三发布)中。它还报告......
...嵌入式图像。
pdfimages -list
也许我还应该让您了解pdfimages
实用程序的局限性,并举例说明其输出报告不完全正确。
一个例子是(最近创建的)this handcoded PDF 中的 GitHub repository of PDFs to help beginners to study the syntax of PDF source code 。
我最初创建此PDF是为了演示 bug with Mozilla's PDF.js renderer 。 以下是关于它在 PDF.js (左)中的外观以及在正确呈现时应该如何显示的截图(右侧,由 Ghostscript 呈现)和 Adobe Reader ):
(右键单击上面的每个图像。选择“在新标签页中打开图像”以查看确切的差异......“)
PDF文件包含2x2像素的图片, 仅嵌入一次 (对象ID为5 0
),但 显示在页面多次使用不同的设置 ,每次放置图像时都会...
在这些极端情况下pdfimages -list
在试图确定此图像实例的某些分辨率时,它会黯然失色:
page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio
------------------------------------------------------------------------------------
1 0 image 2 2 rgb 3 8 image no 5 0 4 4 13B 108%
1 1 image 2 2 rgb 3 8 image no 5 0 5 3 13B 108%
1 2 image 2 2 rgb 3 8 image no 5 0 3 5 13B 108%
1 3 image 2 2 rgb 3 8 image no 5 0 6 3 13B 108%
1 4 image 2 2 rgb 3 8 image no 5 0 3 10 13B 108%
1 5 image 2 2 rgb 3 8 image no 5 0 4 72000 13B 108%
1 6 image 2 2 rgb 3 8 image no 5 0 4 2 13B 108%
1 7 image 2 2 rgb 3 8 image no 5 0 2 4 13B 108%
1 8 image 2 2 rgb 3 8 image no 5 0 14401 1 13B 108%
1 9 image 2 2 rgb 3 8 image no 5 0 1 2 13B 108%
1 10 image 2 2 rgb 3 8 image no 5 0 0.950 4 13B 108%
1 11 image 2 2 rgb 3 8 image no 5 0 4 0.950 13B 108%
1 12 image 2 2 rgb 3 8 image no 5 0 0.950 4 13B 108%
1 13 image 2 2 rgb 3 8 image no 5 0 1 4 13B 108%
1 14 image 2 2 rgb 3 8 image no 5 0 0.950 4 13B 108%
1 15 image 2 2 rgb 3 8 image no 5 0 0.950 4 13B 108%
1 16 image 2 2 rgb 3 8 image no 5 0 4 0.950 13B 108%
如果没有旋转和/或没有倾斜, pdfimages -list
可以获得大多数正确的值。难怪如果图像旋转或歪斜存在差异:因为对于这种情况,您甚至可以如何可靠地定义 x-ppi
和y-ppi
值?这解释了图像号的72000 y-ppi
的(完全错误的)值。 5和14401 x-ppi
用于图片号。 8。
您可以很容易地看到,pdfimages
对于确定其他图像属性非常聪明:
5 0
,表示此图像 嵌入一次 ,但 < em>在页面上多次显示 。2x2
像素。答案 1 :(得分:6)
这并不容易,但有可能。虽然您无法使用PDFDocument
执行此操作,但您可以使用Quartz中的CGPDF*
内容。简而言之:您将需要使用CGPDFPageGetDictionary()
来获取图像所在页面的字典,然后从字典中获取有关其XObject(假设它未在流中内联)的信息。即使这不是直截了当的 - 您需要参考PDF标准来了解如何格式化XObject,然后使用各种CG*
例程深入了解您的需求。
我应该补充一点,PDF文档的默认DPI(“用户单位”)是72.此外,PDF中的许多图像都是使用矢量图形创建的,因此它们实际上没有默认的DPI。
答案 2 :(得分:1)
您需要使用Do命令
访问原始图像XObject的尺寸答案 3 :(得分:1)
答案绝对不是,因为PDF文档实际上没有内在的解决方案。决议最终取决于当时谁处理文件及其要素。它甚至可以根据您在Adobe Acrobat中使用的缩放量而变化。
例如,我创建了一个尺寸为16x16像素的二维条形码,并在将其添加到文档之前将其缩放为一英寸宽和一英寸高。它在adobe acrobat阅读器中看起来非常清晰(即每平方元素的许多像素),但是当我将生成的PDF发送到传真服务时,它最终会达到100x200分辨率(大致)。当我在激光打印机中打印相同的文档时,它最终会更像400dpi。当我在acrobat阅读器中单击条形码图像并将其复制/粘贴到Gimp时,它显示为一个微小的16x16位图。
答案 4 :(得分:-1)
这个答案是作为@Kurt Pfeifle答案的附录,并且在Objective C之外工作。
如果您有Windows系统并且没有设置编译器,那么以下是最简单的方法。下载Windows XPDF二进制文件;然后使用mspaint
提取图像,将其转换为BMP格式,然后pdfimages
将告诉您解决方案。这种方法的优点是:
您可以通过测量图像尺寸来获得精确的分辨率,而无需估算;
将 适用于XPDF的{{1}}版本。
缺点是:
需要做更多工作,包括将文件转换为您可以在不更改分辨率的情况下打开的格式;
您必须单独为每个文件执行此操作,而不是获取列表。
它为您提供图像本身的分辨率,而不是它们在PDF文件中出现的分辨率。 (感谢Kurt Pfeifle的评论)