postscript - 检测 PostScript 文件中的颜色
问题描述
我需要确定 postscript 文件是以彩色还是黑白形式发送到打印机的。虽然有很多解决方案,但它们似乎大多需要渲染文档,然后使用 ghostscript 单独检查每个页面,这对于较大的文档可能会有点慢。我想知道以下 grep 是否会给我相同的信息,或者是否缺少其他类型的颜色?
grep 'setrgbcolor\|setcymkcolor\|colorimage' foo.prn
解决方案
您与 PostScript 中可用的全部颜色空间相去甚远。你没有setcolorspace
并且 setcolorspace 需要一个复杂的参数数组,其中可以包括 /DeviceGray (所以不是颜色)。
您也没有考虑 CIEBasedA 也没有考虑 C=M=Y=0, K 是灰度的事实,即使它在 CMYK 空间中表示,当然 R=G=B 是在 RGB 空间中表示的灰度阴影。同样 /Separataion /Black 将绘制灰色阴影。
此外,PostScript 是一种编程语言;包含一个序言是很常见的,它以一种方便 PostScript 生成应用程序的作者的方式定义操作。序言可以包括在该特定程序中未使用的功能。所以像:
/rg /setrgbcolor load def
会触发你的 grep,即使 PostScript 程序没有使用rg
.
然后是图像。colorimage
不是在 PostScript 中绘制图像的唯一方法,image
运算符采用字典操作数,并且可以包含颜色空间。如上所述,有可能在不同的颜色空间中表示灰度图像(低效,可能,但合法)。
您可以编写一个 PostScript 程序,它“挂钩”颜色运算符的定义,并让该代码询问参数以确定规范是否为灰色空间,图像更难处理,因为如果您想要可靠性,您需要查看图像样本数据,看看它是否实际上只是一张灰度图像。
可以编写一个可以完成这项工作的 Ghostscript 设备,因为它将接收所有操作。它仍然不会很快,因为它必须解释整个文件以检测每个操作。即使这样,这样的工具也可能在特定应用中被击败。例如,如果设备颜色空间是灰色、RGB 或 CMYK,则代码可以询问底层设备并采用不同的代码路径。但这在任何现实世界的 PostScript 程序中都不太可能发生。
推荐阅读
- reactjs - 增量静态再生中的重新验证过程如何工作?
- python-3.x - 通过移动所有应用程序模型,将Django项目转换为MVC(模型,视图,控制)结构,查看不同文件夹中的文件
- javascript - 使用字段名称的 indexedDB 读取游标
- amazon-s3 - 在现有 S3 存储桶上部署时没有触发 Lambda
- string - 我正在制作一个相反的字母加密东西
- java - 添加 getter 后 JButtons 行为怪异
- html - 如何为 Wordpress 格式化带有 Long FormText 的项目符号列表
- java - 如何在 OpenJPA 中注释和持久化地图?
- android - 无法为 org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler 类型的对象获取未知属性“android”
- reactjs - 如何将 ESLint 中的缩进规则应用于样式化组件?