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

时间:2016-04-19 00:27:53

标签: image photoshop

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

enter image description here

有没有办法可以从每种颜色中提取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文件。

enter image description here

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

对于其他人的兴趣,我试图在Photoshop曲线上创建一个过滤器,然后提取其RGB值并使用HTML Canvas上的像素交叉处理应用它,类似于显示here的演示。

2 个答案:

答案 0 :(得分:1)

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

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

然后,您可以使用GNUplot将曲线拟合到这些点,然后进行插值以找到您要查找的点。

摘录参考文件:

enter image description here

以下是我在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);

答案 1 :(得分:1)

这是一种完全不同的,更简单的方法。将下面的数据保存在名为ramp.ppm的文件中 - 它是来自NetPBM套件see Wikipedia here的便携式Pixmap格式。它是一个黑色到白色的灰度斜坡,宽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文件,我就会为你转换它。