如何提取 Photoshop 曲线点到 RGB 数字数组?

How to extract Photoshop curve points to RGB number array?

您好,我使用 Photoshop 曲线制作了一些滤镜效果,它们看起来像这样:

有没有一种方法可以从每种颜色中提取 256 个数字中的每一个,使其成为这样的数字数组?

var r = [0, 0, 0, 1, 1, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 44, 45, 47, 48, 49, 52, 54, 55, 57, 59, 60, 62, 65, 67, 69, 70, 72, 74, 77, 79, 81, 83, 86, 88, 90, 92, 94, 97, 99, 101, 103, 107, 109, 111, 112, 116, 118, 120, 124, 126, 127, 129, 133, 135, 136, 140, 142, 143, 145, 149, 150, 152, 155, 157, 159, 162, 163, 165, 167, 170, 171, 173, 176, 177, 178, 180, 183, 184, 185, 188, 189, 190, 192, 194, 195, 196, 198, 200, 201, 202, 203, 204, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216, 218, 219, 219, 220, 221, 222, 223, 224, 225, 226, 227, 227, 228, 229, 229, 230, 231, 232, 232, 233, 234, 234, 235, 236, 236, 237, 238, 238, 239, 239, 240, 241, 241, 242, 242, 243, 244, 244, 245, 245, 245, 246, 247, 247, 248, 248, 249, 249, 249, 250, 251, 251, 252, 252, 252, 253, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

抱歉这个问题是否愚蠢,我什至不确定我在问什么,已经晚了。

更新: 按照 Mark Setchell 的回答,我能够创建一个包含这些值的 saved.ppm 文件。

最后一步是从这一长串数字中提取RGB值,红色是第0、3、6个数字,绿色是第1、4、7个数字等

出于其他人的兴趣,我尝试在 Photoshop 曲线上创建滤镜,然后提取其 RGB 值并使用像素交叉处理在 HTML Canvas 上应用它,类似于显示的演示here.

我今天不想写代码,尤其是当你不太确定自己在做什么的时候!不过,你问的是完全可以实现的。

如果保存创建的曲线(Save 选项在右上角的菜单中),您将得到一个 .ACV 文件。如果您向下滚动到标题为 Curves 的部分,则会给出此文件的格式 here。这是一种非常简单的格式,只有一个标识符和一个版本号,然后是您为曲线定义的点数,即在您的情况下为 6。然后,对于每个点,4 个坐标。这些可以很容易地用 Perl 或类似的工具提取。

然后您可以将曲线拟合到这些点,可能使用 GNUPlot,然后进行插值以找到您正在寻找的点。

参考文档摘录:

这是我在 Perl 中编写的一些代码的摘录,这些代码实际上编写了一个 .ACV 文件。我知道你真的想读一本,你会明白字节打包技术的想法...

#!/usr/bin/perl
use strict;
use warnings;
use Image::Magick;
use Data::Dumper;

my $Debug=1;    # 1=print debug messages, 0=don't
my $NPOINTS=5;  # Number of points in curve we create

....
.... other stuff
....

# Work out name of the curve file = image basename + acv
my $curvefile=substr($imagename,0,rindex($imagename,'.')) . ".acv";
open(my $out,'>:raw',$curvefile) or die "Unable to open: $!";
print $out pack("s>",4); # Version=4
print $out pack("s>",4); # Number of curves in file = Master NULL curve + R + G + B

print $out pack("s>",2);                        # Master NULL curve with 2 points for all channels
print $out pack("s>",0  ),pack("s>",0  );       # 0 out, 0 in
print $out pack("s>",255),pack("s>",255);       # 255 out, 255 in

print $out pack("s>",2+$NPOINTS);               # Red curve
print $out pack("s>",0  ),pack("s>",0  );       # 0 out, 0 in
for($p=0;$p<$NPOINTS;$p++){
   print $out pack("s>",$Rpoint[$p]),pack("s>",$greypoint[$p]);
}
print $out pack("s>",255),pack("s>",255);       # 255 out, 255 in

print $out pack("s>",2+$NPOINTS);               # Green curve
print $out pack("s>",0  ),pack("s>",0  );       # 0 out, 0 in
for($p=0;$p<$NPOINTS;$p++){
   print $out pack("s>",$Gpoint[$p]),pack("s>",$greypoint[$p]);
}
print $out pack("s>",255),pack("s>",255);       # 255 out, 255 in

print $out pack("s>",2+$NPOINTS);               # Blue curve
print $out pack("s>",0  ),pack("s>",0  );        # 0 out, 0 in
for($p=0;$p<$NPOINTS;$p++){
   print $out pack("s>",$Bpoint[$p]),pack("s>",$greypoint[$p]);
}
print $out pack("s>",255),pack("s>",255);        # 255 out, 255 in

close($out);

这是一种完全不同且更简单的方法。将以下数据保存在名为 ramp.ppm 的文件中 - 它是来自 NetPBM 套件 see Wikipedia here 的便携式像素图格式。它是一个 256 像素宽和 1 像素高的黑白灰度渐变。

将其加载到 Photoshop 中并对其应用曲线,然后另存为 PNG 文件。

P3
256 1
255
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 10 10
11 11 11
12 12 12
13 13 13
14 14 14
15 15 15
16 16 16
17 17 17
18 18 18
19 19 19
20 20 20
21 21 21
22 22 22
23 23 23
24 24 24
25 25 25
26 26 26
27 27 27
28 28 28
29 29 29
30 30 30
31 31 31
32 32 32
33 33 33
34 34 34
35 35 35
36 36 36
37 37 37
38 38 38
39 39 39
40 40 40
41 41 41
42 42 42
43 43 43
44 44 44
45 45 45
46 46 46
47 47 47
48 48 48
49 49 49
50 50 50
51 51 51
52 52 52
53 53 53
54 54 54
55 55 55
56 56 56
57 57 57
58 58 58
59 59 59
60 60 60
61 61 61
62 62 62
63 63 63
64 64 64
65 65 65
66 66 66
67 67 67
68 68 68
69 69 69
70 70 70
71 71 71
72 72 72
73 73 73
74 74 74
75 75 75
76 76 76
77 77 77
78 78 78
79 79 79
80 80 80
81 81 81
82 82 82
83 83 83
84 84 84
85 85 85
86 86 86
87 87 87
88 88 88
89 89 89
90 90 90
91 91 91
92 92 92
93 93 93
94 94 94
95 95 95
96 96 96
97 97 97
98 98 98
99 99 99
100 100 100
101 101 101
102 102 102
103 103 103
104 104 104
105 105 105
106 106 106
107 107 107
108 108 108
109 109 109
110 110 110
111 111 111
112 112 112
113 113 113
114 114 114
115 115 115
116 116 116
117 117 117
118 118 118
119 119 119
120 120 120
121 121 121
122 122 122
123 123 123
124 124 124
125 125 125
126 126 126
127 127 127
128 128 128
129 129 129
130 130 130
131 131 131
132 132 132
133 133 133
134 134 134
135 135 135
136 136 136
137 137 137
138 138 138
139 139 139
140 140 140
141 141 141
142 142 142
143 143 143
144 144 144
145 145 145
146 146 146
147 147 147
148 148 148
149 149 149
150 150 150
151 151 151
152 152 152
153 153 153
154 154 154
155 155 155
156 156 156
157 157 157
158 158 158
159 159 159
160 160 160
161 161 161
162 162 162
163 163 163
164 164 164
165 165 165
166 166 166
167 167 167
168 168 168
169 169 169
170 170 170
171 171 171
172 172 172
173 173 173
174 174 174
175 175 175
176 176 176
177 177 177
178 178 178
179 179 179
180 180 180
181 181 181
182 182 182
183 183 183
184 184 184
185 185 185
186 186 186
187 187 187
188 188 188
189 189 189
190 190 190
191 191 191
192 192 192
193 193 193
194 194 194
195 195 195
196 196 196
197 197 197
198 198 198
199 199 199
200 200 200
201 201 201
202 202 202
203 203 203
204 204 204
205 205 205
206 206 206
207 207 207
208 208 208
209 209 209
210 210 210
211 211 211
212 212 212
213 213 213
214 214 214
215 215 215
216 216 216
217 217 217
218 218 218
219 219 219
220 220 220
221 221 221
222 222 222
223 223 223
224 224 224
225 225 225
226 226 226
227 227 227
228 228 228
229 229 229
230 230 230
231 231 231
232 232 232
233 233 233
234 234 234
235 235 235
236 236 236
237 237 237
238 238 238
239 239 239
240 240 240
241 241 241
242 242 242
243 243 243
244 244 244
245 245 245
246 246 246
247 247 247
248 248 248
249 249 249
250 250 250
251 251 251
252 252 252
253 253 253
254 254 254
255 255 255

如果您有 Linux,并且有 ImageMagick,则可以将保存的 PNG 文件转换回 PPM 文件

convert saved.png -compress none saved.ppm

然后文件 saved.ppm 将显示灰度渐变中每个输入值的曲线输出 - 实际上它将是您要查找的 256 个值。

如果你没有ImageMagick,只要给我PNG文件,我会帮你转换。