将图像替换为.eps文件?

问题描述 投票:0回答:1

[我正在尝试找出如何用jpeg交换嵌入在.eps文件中的图像。我的“模板” .eps文件包含几个看起来类似的部分,每个部分代表一个不同的图像:

Adobe_AGM_Image/AGMIMG_fl cf /ASCII85Decode fl /RunLengthDecode filter ddf
<<
/T 1
/W 4773 
/H 273 
/M[4773 0 0 -273 0 273 ]
/BC 8 
/D[0 1 0 1 0 1 0 1 ]
/DS [
[AGMIMG_fl 4773 string /rs cvx /pop cvx] cvx
[AGMIMG_fl 4773 string /rs cvx /pop cvx] cvx
[AGMIMG_fl 4773 string /rs cvx /pop cvx] cvx
[AGMIMG_fl 4773 string /rs cvx /pop cvx] cvx
]
/O 3
>>
%%BeginBinary: 1
img
[image data]~>

%%EndBinary

[根据我的判断,图像文件是ASCII85编码的,但是我还没有找到一种方法来编码jpeg图像,以便可以将其换出。

为了澄清这种情况,我同时拥有.eps文件和原始文件。 ASCII85解码.eps中的图像块与jpeg中的信息不匹配,反之亦然。

我的最终目标是创建一个带有图层的.eps,而不使用Adobe的脚本语言,而简单的查找/替换似乎是目前实现我的目标的最简单方法。到目前为止,诸如imagemagick,graphicsmagick和枕头之类的图像库都使我失望。

jpeg eps ascii85
1个回答
0
投票

实际上,您不应该尝试替换图像。

PostScript是一种编程语言,除非您打算处理的all EPS文件是由同一应用程序生成的,并且实际上是与该应用程序完全相同的版本,否则该程序的确切语义可能会有所不同。如果语义不同,则搜索和替换将失败。

您提供的部分不完整,它看起来像是CMYK空间中的4色图像(因为它有4个读取数据的过程,而Decode数组可能有8个元素),但是没有尝试设置颜色空间,您也不知道有效的CTM。除非将具有相同行数和列数的图像缩放到适合同一区域的尺寸,否则很难。

图像数据不仅是简单的ASCII85编码,还经过游程长度编码(在游程长度编码后应用ascii85),并且数据以交错栅格的形式提供。青色线,洋红色线,黄色线和blacK线。为了使图像应用程序读取此图像,您将必须读取一组4个栅格,撤消ascii85编码,然后撤消行程编码,然后分别从每个栅格中采样并进行交织以产生4行CMYKCMYKCMYK ...数据。 (请注意,很少有图像应用程序可以完全处理CMYK数据。)>

为了替换图像数据,并假设替换<>具有相同的尺寸,您需要将图像数据解码为图像样本(即撤消JPEG压缩)。将其分解为C,M,Y,K个平面,游程长度对平面进行编码,然后ascii85对每个栅格进行编码,然后一次将图像数据写入栅格线。

如果颜色空间,尺寸,每个组件的位数或编码存在任何差异,那么您还需要替换程序部分,该部分读取图像数据并将其按摩成适合传递给解释器的形式,这就是需要您学习PostScript编程语言,这将是一项艰巨的任务。

'img'过程(将在程序的前面定义)将获取字典数据,并将其转换为图像字典以提供给PostScript图像运算符,或者将其转换为等效的1级操作数以提供给数据库。图像运算符,如果解释器非常老,仅支持级别1。

通常,处理EPS文件的唯一方法是使用完整的PostScript解释器,例如Ghostscript(由ImageMagick和我假定为GrpahicsMagick使用)。因为您确实需要解释程序。您可以对符合EPS规范的程序进行有限的更改,但是批发替换图像数据不是预期的目的之一。

我不知道您所说的“层”是什么意思。 PostScript中没有层的概念,这是因为它是页面描述语言,因此不需要“层”。也许如果您可以解释要实现的目标,则可以提供其他解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.