将pdf中的所有颜色转换为一种特定颜色

将pdf中的所有颜色转换为一种特定颜色,pdf,imagemagick,ghostscript,Pdf,Imagemagick,Ghostscript,我正在做一个php项目,需要执行一些pdf操作 我需要将矢量文件(pdf)的所有颜色“转换”为一种非常特定的颜色(在我的例子中是专色) 下面是一个示例 输入文件可以变化,它可以包含任何颜色(因此我不能将所有的“红色”或“绿色”转换为我的目标颜色) 关于如何使用imagemagick的合成在光栅图像上实现这一点,我有一个很好的想法,但我不确定使用矢量图像是否可行 我的第一个方法是创建一个pdf模板,用所需颜色填充矩形。我的希望是使用ghostscript以某种方式将输入文件作为模板上的掩码应用。

我正在做一个php项目,需要执行一些pdf操作

我需要将矢量文件(pdf)的所有颜色“转换”为一种非常特定的颜色(在我的例子中是专色)

下面是一个示例

输入文件可以变化,它可以包含任何颜色(因此我不能将所有的“红色”或“绿色”转换为我的目标颜色)

关于如何使用imagemagick的合成在光栅图像上实现这一点,我有一个很好的想法,但我不确定使用矢量图像是否可行

我的第一个方法是创建一个pdf模板,用所需颜色填充矩形。我的希望是使用ghostscript以某种方式将输入文件作为模板上的掩码应用。但我认为这是不可能的,因为矢量文件不同于光栅图像

我的第二种方法是使用ghostscript将所有颜色(不考虑颜色空间)转换为所需的颜色。但经过大量的谷歌搜索,我只找到了从一个颜色空间转换到另一个颜色空间的解决方案(例如,从sRGB到CMYK,从CMYK到灰度,等等)

我不是一个很好的设计师,所以也许我只是缺少这些“动作”的适当“术语”

TL;博士 我正在寻找一个库/工具,可以帮助我“转换”成一个非常具体的颜色矢量文件(pdf)的所有颜色

  • 输入文件可能不同(各种形状和颜色),但始终是没有任何字体的pdf文件
  • 输出必须保持为矢量文件(读取,无光栅化。)
  • 我在运行linux的VPS(centos7,我认为这与此无关)上有根访问权限

您可以使用Ghostscript完成此操作,但您需要一些PostScript编程经验

基本上,您希望通过查看每个setcolor操作,检查颜色空间和值来覆盖所有setcolor/setcolorspace操作,以查看其是否为目标颜色,如果是,则将颜色空间和值设置为所需目标

设置颜色空间和值的各种PDF操作都在ghostpdl/Resource/Init/PDF_draw.ps中定义。您需要修改以下内容的定义:

/G和/G(设备灰色中的笔划和填充颜色) /RG和/RG(设备GB中的笔划和填充颜色) /K和/K(DeviceCMYK中的笔划和填充颜色) /SC和/SC(索引、CalGray、CalRGB或Lab中的笔划和填充颜色) /SCN和/或SCN(图案、分隔、设备或基于ICC的笔划和填充颜色)

那里有不少皱纹

您可能可以忽略图案空间,只处理由图案本身设置的任何颜色

对于SC/SC和/SCN/SCN,您需要确定指定的颜色是否为目标颜色,假设您的目标可以在这些空间中指定。请注意/index特别有趣,因为它可以有任何其他空间的基空间,所以您需要查看

最后请注意,图像(位图)的指定方式不同,修改这些图像将更加困难

根据需求的确切性质(即什么空间/颜色构成有效目标),这可能是一项相当长的任务,需要具有PostScript编程能力的人来编写

哦,最后一点,你考虑过透明度吗?这也可以指定混合颜色空间,这可能意味着在替换颜色后,它将在不同的颜色空间中混合,从而导致仔细的替换消失


为了避免您认为这不太可能,我应该提到,许多PDF制作人创建的文件中都包含透明组,即使没有实际的透明操作发生。

您可以使用Ghostscript完成此操作,但您需要一些PostScript编程经验

基本上,您希望通过查看每个setcolor操作,检查颜色空间和值来覆盖所有setcolor/setcolorspace操作,以查看其是否为目标颜色,如果是,则将颜色空间和值设置为所需目标

设置颜色空间和值的各种PDF操作都在ghostpdl/Resource/Init/PDF_draw.ps中定义。您需要修改以下内容的定义:

/G和/G(设备灰色中的笔划和填充颜色) /RG和/RG(设备GB中的笔划和填充颜色) /K和/K(DeviceCMYK中的笔划和填充颜色) /SC和/SC(索引、CalGray、CalRGB或Lab中的笔划和填充颜色) /SCN和/或SCN(图案、分隔、设备或基于ICC的笔划和填充颜色)

那里有不少皱纹

您可能可以忽略图案空间,只处理由图案本身设置的任何颜色

对于SC/SC和/SCN/SCN,您需要确定指定的颜色是否为目标颜色,假设您的目标可以在这些空间中指定。请注意/index特别有趣,因为它可以有任何其他空间的基空间,所以您需要查看

最后请注意,图像(位图)的指定方式不同,修改这些图像将更加困难

根据需求的确切性质(即什么空间/颜色构成有效目标),这可能是一项相当长的任务,需要具有PostScript编程能力的人来编写

哦,最后一点,你考虑过透明度吗?这也可以指定混合颜色空间,这可能意味着在替换颜色后,它将在不同的颜色空间中混合,从而导致仔细的替换消失


为了避免您认为这不太可能,我应该提到,许多PDF制作人创建的文件中都包含透明组,即使没有实际的透明操作。

您可以尝试以高分辨率光栅化,并使用ImageMagick转换颜色,然后使用potrace重新矢量化

那么,如果你有
convert -density 288 document.pdf ... 
convert image.png -fill black -fuzz 10% +opaque white pgm:- | potrace -b svg -o result.svg -
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
 "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
 width="800.000000pt" height="450.000000pt" viewBox="0 0 800.000000 450.000000"
 preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.13, written by Peter Selinger 2001-2015
</metadata>
<g transform="translate(0.000000,450.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M4800 4324 c0 -50 -2 -55 -17 -49 -84 35 -140 -17 -130 -119 7 -77
70 -120 122 -82 16 11 21 11 33 0 7 -8 18 -12 23 -9 5 4 9 76 9 161 0 147 -1
154 -20 154 -18 0 -20 -7 -20 -56z m-22 -90 c46 -32 18 -134 -38 -134 -25 0
-40 29 -40 79 0 39 19 71 43 71 7 0 23 -7 35 -16z"/>
<path d="M4926 4358 c-9 -12 -16 -35 -16 -50 0 -18 -5 -28 -15 -28 -8 0 -15
-7 -15 -15 0 -8 7 -15 15 -15 12 0 15 -17 15 -89 0 -89 6 -105 38 -94 8 3 12
31 12 94 0 88 0 89 25 89 16 0 25 6 25 15 0 9 -9 15 -25 15 -21 0 -25 5 -25
30 0 30 7 34 43 30 13 -1 18 4 15 17 -5 29 -72 30 -92 1z"/>
<path d="M3347 4364 c-4 -4 -7 -16 -7 -26 0 -14 6 -19 23 -16 14 2 22 10 22
23 0 20 -25 32 -38 19z"/>
<path d="M4170 4310 c0 -23 -4 -30 -20 -30 -11 0 -20 -7 -20 -15 0 -8 9 -15
20 -15 18 0 20 -7 20 -80 0 -74 2 -81 25 -96 32 -21 75 -12 75 17 0 16 -4 19
-21 14 -30 -10 -39 9 -39 83 l0 62 30 0 c20 0 30 5 30 15 0 10 -10 15 -30 15
-27 0 -30 3 -30 30 0 23 -4 30 -20 30 -16 0 -20 -7 -20 -30z"/>
<path d="M3345 4278 c-3 -8 -4 -59 -3 -114 2 -80 6 -99 18 -99 12 0 15 19 15
109 0 79 -4 111 -12 113 -7 3 -15 -2 -18 -9z"/>
<path d="M3453 4283 c-9 -3 -13 -34 -13 -108 0 -74 4 -105 13 -108 29 -10 37
6 37 78 0 57 4 75 18 88 46 42 72 10 72 -91 0 -54 4 -71 15 -76 22 -8 26 10
23 104 -3 77 -5 84 -31 104 -24 17 -32 19 -59 8 -18 -6 -38 -8 -47 -3 -9 5
-22 6 -28 4z"/>
<path d="M3687 4283 c-4 -3 -7 -71 -7 -150 l0 -143 25 0 c23 0 25 4 25 45 0
42 2 45 19 35 33 -17 61 -11 92 19 24 25 29 37 29 81 0 95 -51 141 -119 107
-25 -13 -31 -13 -35 -1 -6 15 -19 18 -29 7z m122 -47 c19 -22 23 -78 9 -106
-29 -55 -88 -26 -88 43 0 62 48 100 79 63z"/>
<path d="M3927 4284 c-4 -4 -7 -45 -7 -91 0 -76 2 -86 25 -108 27 -28 61 -32
92 -10 18 13 22 13 27 0 3 -8 12 -12 21 -9 13 5 15 24 13 113 -3 98 -4 106
-23 106 -18 0 -20 -8 -23 -75 -4 -94 -28 -128 -72 -100 -10 6 -16 34 -20 91
-5 75 -15 101 -33 83z"/>
<path d="M4432 4282 c-9 -7 -12 -43 -10 -148 3 -136 4 -139 26 -142 20 -3 22
1 22 41 l0 45 35 -11 c31 -9 39 -8 63 10 37 27 54 83 42 136 -15 68 -64 94
-120 63 -20 -12 -26 -12 -35 0 -6 8 -15 10 -23 6z m122 -54 c22 -31 20 -81 -3
-109 -19 -23 -21 -23 -48 -9 -24 13 -28 23 -31 62 -3 39 1 49 20 62 30 22 44
20 62 -6z"/>
<path d="M4310 4096 c0 -30 30 -43 47 -21 16 23 5 45 -23 45 -19 0 -24 -5 -24
-24z"/>
<path d="M4046 3795 l-67 -141 -227 -12 c-418 -22 -765 -74 -1127 -167 -612
-157 -1080 -387 -1387 -684 -214 -205 -323 -393 -359 -615 -16 -101 -6 -270
20 -361 136 -461 637 -856 1409 -1111 152 -51 434 -125 583 -154 l66 -13 -30
-169 c-16 -93 -27 -171 -24 -174 2 -3 124 58 271 135 l266 140 80 -9 c44 -5
197 -14 339 -21 259 -12 617 -3 844 21 l88 9 265 -140 c146 -77 268 -138 270
-136 5 4 -41 294 -52 328 -4 13 8 19 58 28 465 89 939 260 1278 461 626 370
880 871 686 1356 -69 174 -228 375 -415 526 -517 418 -1411 697 -2402 750
l-226 12 -71 141 -70 140 -66 -140z m-202 -407 c-31 -62 -119 -241 -196 -398
-76 -156 -140 -285 -142 -287 -3 -3 -799 -120 -1156 -170 -102 -14 -188 -29
-193 -32 -4 -4 102 -113 235 -242 133 -129 353 -344 489 -479 l248 -245 -45
-260 c-25 -143 -58 -332 -73 -420 l-27 -160 -41 2 c-61 2 -333 68 -515 124
-674 209 -1153 533 -1334 905 -59 121 -77 209 -71 349 5 137 35 235 109 359
58 97 206 261 311 344 463 366 1242 627 2097 701 69 6 141 13 160 15 19 1 72
4 118 4 l82 2 -56 -112z m906 86 c760 -79 1420 -283 1875 -581 864 -566 763
-1326 -245 -1840 -266 -136 -602 -253 -942 -328 -92 -21 -173 -35 -181 -32 -9
3 -20 44 -31 114 -10 59 -42 248 -72 419 l-54 311 213 210 c116 115 337 331
489 479 153 148 274 271 270 275 -4 3 -106 20 -227 37 -452 64 -1118 162
-1120 164 -6 6 -195 387 -291 587 l-104 214 137 -7 c76 -4 203 -14 283 -22z
m-424 -2761 c137 -73 200 -111 193 -118 -14 -14 -794 -14 -809 1 -7 7 49 41
192 117 112 58 207 107 212 107 5 0 100 -48 212 -107z"/>
<path d="M1815 3669 c-46 -47 -113 -80 -221 -111 -62 -17 -106 -22 -204 -22
-137 0 -185 12 -221 58 -48 61 -211 80 -449 53 -118 -14 -400 -63 -408 -72 -3
-3 28 -145 32 -145 1 0 55 11 120 25 181 37 365 58 481 53 98 -3 105 -5 125
-30 113 -144 579 -119 806 44 50 35 109 108 97 118 -5 4 -33 21 -63 38 l-55
31 -40 -40z"/>
<path d="M7647 575 c-66 -79 -247 -137 -432 -138 -134 0 -170 10 -221 61 -18
17 -53 37 -84 46 -70 21 -238 21 -395 0 -122 -15 -364 -60 -372 -68 -5 -5 17
-119 26 -133 4 -7 47 -2 121 13 181 37 358 56 477 52 l108 -3 37 -37 c120
-117 482 -110 720 13 75 40 168 123 168 151 0 10 -110 80 -122 77 -2 0 -16
-16 -31 -34z"/>
</g>
</svg>
sed 's/path /path fill="#7CBE89" /' black.svg > green.svg