Hi I made some filter effects using Photoshop curves and they look like this:
Is there a way I can extract each one of the 256 numbers from each color so it is a number array like this?
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]
Sorry for the question if it’s stupid, i’m not even sure what i’m asking, it’s late.
UPDATE: following Mark Setchell‘s answer, i was able to create a saved.ppm file with these values inside it.
The last step was to extract the RGB values from this long string of numbers, Red is the 0th, 3nd, 6th number, Green is the 1st, 4th, 7th number etc.
For anyone else’s interest, I was trying to create a filter on Photoshop curves, then extract its RGB values and apply it using pixel cross processing on HTML Canvas, similar to a demo shown here.
2
Answers
I don’t feel like writing the code today, least of all when you are not too sure what you are up to! However, what you are asking is perfectly achievable.
If you save the curve you have created (the
Save
option is in the top right menu), you will get a.ACV
file. The format of this file is given here if you scroll down to the section entitled Curves. It is a pretty simple format with just an identifier and a version number then a count of the number of points that you have defined for your curve, i.e. 6 in your case. Then, for each point, the 4 coordinates. These can be pretty easily extracted with Perl or similar.You could then fit a curve to those points, probably using GNUplot, and interpolate to find the points you are looking for.
Excerpt from referenced document:
Here is an extract from some code I wrote in Perl that actually writes a
.ACV
file. I know you will actually want to read one, bit you’ll get the idea of the byte packing technique…Here is a totally different, and simpler way of doing it. Save the data below in a file called
ramp.ppm
– it is a Portable Pixmap format from the NetPBM suite see Wikipedia here. It is a black-to-white greyscale ramp 256 pixels wide and 1 pixel tall.Load that into Photoshop and apply your curve to it then save as a PNG file.
If you have Linux, and you have ImageMagick, you can then convert the saved
PNG
file back into aPPM
file withThe file
saved.ppm
will then show you the output of your curve for each input value in the greyscale ramp – in effect it will be the 256 values you are looking for.If you don’t have ImageMagick, just give me the PNG file and I’ll convert it for you.