这是一种基于命令行的方法,用于从PDF中提取ICC颜色配置文件。它使用了安全研究员Didier Stevens编写的Python脚本
pdf-parser.py,您可以在此处
下载该脚本。
然而,这个工具不是一个专门用于ICC提取的工具。(我不知道有这样的工具。)它是一个通用的命令行工具,用于调查PDF文件。
因此,您需要通过各种步骤来实现提取。
第1步:确定ICC配置文件的PDF对象ID
您必须使用
-s
来搜索字符串
ICCBased
。(没有嵌入ICC配置文件的PDF文件将没有这个关键字[可能除了在文本内容中使用它...])
pdf-parser -s ICCBased my.pdf
我的测试PDF返回了这个:
obj 18 0
Type:
Referencing: 21 0 R
似乎在PDF对象21中可以找到ICC配置文件。
步骤2:查看第1步中找到的PDF对象
您需要使用-o 21
来查看PDF对象21:
pdf-parser.py -o 21 my.pdf
我的测试 PDF 返回了这个:
obj 21 0
Type:
Referencing:
Contains stream
<<
/Alternate /DeviceRGB
/Filter /FlateDecode
/Length 2574
/N 3
>>
好的,看起来我们已经接近了...
步骤3:转储包含配置文件的PDF对象中的流
在第2步中,我们获得了两个重要的信息:
- PDF对象21包含一个流(使用
pdf-parser.py
的-o 21
参数不显示其内容)。
- 必须使用
/FlateDecode
解压缩对象流才能获取其内容。
因此,现在我们需要使用两个附加参数运行pdf-parser.py
:
-d filename
,以便将PDF对象21的流转储到文件中。
-f
,以便在将对象流转储到文件时过滤/解压缩它。
- 运行命令:
pdf-parser.py -o 21 -f -d 21.stream my.pdf
步骤4:验证提取的内容
我们现在已经将PDF对象21的流导出到名为
21.stream
的文件中。让我们看看它包含了什么内容:
file 21.stream
21.stream: Microsoft ICM Color Profile
看起来我们成功了。 :-)
步骤5:打开颜色配置文件
我会检查我的Mac OSX系统是否接受此配置文件:
mv 21.stream 21.icm
open 21.icm
OSX使用'Color Sync Utility'打开文件并显示窗口。单击列表条目会在窗口底部打开不同的信息面板:
![Mac OSX 'Color Sync Utility' showing various infos about the extracted ICM profile.](https://istack.dev59.com/zCFOD.webp)
步骤六:使用Argyll的iccdump
将ICC文件的内容转储为文本
请注意,Graeme Gill的ArgyllCMS是一款开源的颜色管理软件,适用于Linux、Mac OSX和Windows平台,并提供多个命令行工具。其中之一是iccdump
。我们可以使用它来查看新赢得的21.icm
文件的属性:
iccdump 21.icm
ICC:
Header:
size = 3144 字节
CMM = 'Lino'
Version = 2.1.0
Device Class = 显示器
Color Space = RGB
Conn. Space = XYZ
Date, Time = 1998年2月9日,6:49:00
Platform = 微软
Flags = 非嵌入式配置文件,可在任何位置使用
Dev. Mnfctr. = 'IEC '
Dev. Model = 'sRGB'
Dev. Attrbts = 反射型,有光泽
Rndrng Intnt = 感知意图
Illuminant = 0.964203,1.000000,0.824905 [Lab 100.000000,0.000498,-0.000436]
Creator = 'HP '
tag 0:
sig 'cprt'
type 'text'
offset 336
size 51
文本:
No. chars = 43
0x0000: 版权所有 (c) 1998 Hewlett-Packard 公司
tag 1:
sig 'desc'
type 'desc'
offset 388
size 108
文本描述:
ASCII 数据,长度为 18 个字符:
0x0000: sRGB IEC61966-2.1
无 Unicode 数据
ScriptCode 数据,代码 0x0,长度为 18 个字符
0x0000: 73 52 47 42 20 49 45 43 36 31 39 36 36 2d 32 2e 31 00
tag 2:
sig 'wtpt'
type 'XYZ '
offset 496
size 20
XYZ 数组:
No. elements = 1
tag 3:
sig 'bkpt'
type 'XYZ '
offset 516
size 20
XYZ 数组:
No. elements = 1
tag 4:
sig 'rXYZ'
type 'XYZ '
offset 536
size 20
XYZ 数组:
No. elements = 1
tag 5:
sig 'gXYZ'
type 'XYZ '
offset 556
size 20
XYZ 数组:
No. elements = 1
tag 6:
sig 'bXYZ'
type 'XYZ '
offset 576
size 20
XYZ 数组:
No. elements = 1
tag 7:
sig 'dmnd'
type 'desc'
offset 596
size 112
文本描述:
ASCII 数据,长度为 22 个字符:
0x0000: IEC http://www.iec.ch
无 Unicode 数据
ScriptCode 数据,代码 0x0,长度为 22 个字符
0x0000: 49 45 43 20 68 74 74 70 3a 2f 2f 77 77 77 2e 69 65 63 2e 63 68 00
tag 8:
sig 'dmdd'
type 'desc'
offset 708
size 136
文本描述:
ASCII 数据,长度为 46 个字符:
0x0000: IEC 61966-2.1 Default RGB colour space - sRGB
无 Unicode 数据
ScriptCode 数据,代码 0x0,长度为 46 个字符
0x0000: 49 45 43 20 36 31 39 36 36 2d 32 2e 31 20 44 65 66 61 75 6c 74 20
...
tag 9:
sig 'vued'
type 'desc'
offset 844
size 134
文本描述:
ASCII 数据,长度为 44 个字符:
0x0000: Reference Viewing Condition in IEC61966-2.1
无 Unicode 数据
ScriptCode 数据,代码 0x0,长度为 44
注意:
ArgyllCMS 包含一个命令行工具
extracticc
,它可以从 TIFF 文件中提取嵌入的 ICC 配置文件。但是它没有从 PDF 文件中提取配置文件的工具。