I do not know javascript or photoshop scripting I only hack at code i steal from script I download. In the Photoshop CS5 Java scripting there seems to be a sample script names Histogram.jsx it get all four channels I never understood what Adobe fifth Colors was about. it looks like this // Function to activate all the channels according to the documents mode // Takes a document reference for input function TurnOnDocumentHistogramChannels(inDocument) { // see how many channels we need to activate var visibleChannelCount = 0 // based on the mode of the document switch (inDocument.mode) { case DocumentMode.BITMAP: case DocumentMode.GRAYSCALE: case DocumentMode.INDEXEDCOLOR: visibleChannelCount = 1 break; case DocumentMode.DUOTONE: visibleChannelCount = 2 break; case DocumentMode.RGB: case DocumentMode.LAB: visibleChannelCount = 3 break; case DocumentMode.CMYK: visibleChannelCount = 4 break; case DocumentMode.MULTICHANNEL: default: visibleChannelCount = inDocument.channels.length + 1 break; } // now get the channels to activate into a local array var aChannelArray = new Array() // index for the active channels array var aChannelIndex = 0 for(var channelIndex = 0; channelIndex < inDocument.channels.length; channelIndex++) { if (channelIndex < visibleChannelCount) { aChannelArray[aChannelIndex++] = inDocument.channels[channelIndex] } } // now activate them inDocument.activeChannels = aChannelArray } // Save the current preferences var startRulerUnits = app.preferences.rulerUnits var startTypeUnits = app.preferences.typeUnits var startDisplayDialogs = app.displayDialogs // Set Adobe Photoshop CS5 to use pixels and display no dialogs app.preferences.rulerUnits = Units.PIXELS app.preferences.typeUnits = TypeUnits.PIXELS app.displayDialogs = DialogModes.NO // if there are no documents open then try to open a sample file if (app.documents.length == 0) { open(File(app.path + "/Samples/Fish.psd")) } // get a reference to the working document var docRef = app.activeDocument // create the output file // first figure out which kind of line feeds we need if ($.os.search(/windows/i) != -1) { fileLineFeed = "Windows" } else { fileLineFeed = "Macintosh" } // create the output file accordingly fileOut = new File("~/Desktop/Histogram.log") fileOut.lineFeed = fileLineFeed fileOut.open("w", "TEXT", "????") // write out a header fileOut.write("Histogram report for " + docRef.name) // find out how many pixels I have var totalCount = docRef.width.value * docRef.height.value // more info to the out file fileOut.write(" with a total pixel count of " + totalCount + "\n") // channel indexer var channelIndex = 0 // remember which channels are currently active var myActiveChannels = app.activeDocument.activeChannels // document histogram only works in these modes if (docRef.mode == DocumentMode.RGB || docRef.mode == DocumentMode.INDEXEDCOLOR || docRef.mode == DocumentMode.CMYK) { // activate the main channels so we can get the documents histogram TurnOnDocumentHistogramChannels(docRef) // Output the documents histogram OutputHistogram(docRef.histogram, "Luminosity", fileOut) } // local reference to work from var myChannels = docRef.channels // loop through each channel and output the histogram for (var channelIndex = 0; channelIndex < myChannels.length; channelIndex++) { // the channel has to be visible to get a histogram myChannels[channelIndex].visible= true // turn off all the other channels for (var secondaryIndex = 0; secondaryIndex < myChannels.length; secondaryIndex++) { if (channelIndex != secondaryIndex) { myChannels[secondaryIndex].visible= false } } // Use the function to dump the histogram OutputHistogram(myChannels[channelIndex].histogram, myChannels[channelIndex].name, fileOut) } // close down the output file fileOut.close() alert("Histogram file saved to: " + fileOut.fsName) // reset the active channels docRef.activeChannels = myActiveChannels // Reset the application preferences app.preferences.rulerUnits = startRulerUnits app.preferences.typeUnits = startTypeUnits app.displayDialogs = startDisplayDialogs // Utility function that takes a histogram and name // and dumps to the output file function OutputHistogram(inHistogram, inHistogramName, inOutFile) { // find ouch which count has the largest number // I scale everything to this number for the output var largestCount = 0 // a simple indexer I can reuse var histogramIndex = 0 // see how many samples we have total var histogramCount = 0 // search through all and find the largest single item for (histogramIndex = 0; histogramIndex < inHistogram.length; histogramIndex++) { histogramCount += inHistogram[histogramIndex] if (inHistogram[histogramIndex] > largestCount) largestCount = inHistogram[histogramIndex] } // These should match if (histogramCount != totalCount) { alert("Something bad is happening!") } // see how much each "X" is going to count as var pixelsPerX = largestCount / 100 // output this data to the file inOutFile.write("One X = " + pixelsPerX + " pixels.\n") // output the name of this histogram inOutFile.write(inHistogramName + "\n") // loop through all the items and output in the following format // 001 // 002 for (histogramIndex = 0; histogramIndex < inHistogram.length; histogramIndex++) { // I need an extra "0" for this line item to keep everything in line if (histogramIndex < 10) inOutFile.write("0") // I need an extra "0" for this line item to keep everything in line if (histogramIndex < 100) inOutFile.write("0") // output the index to file inOutFile.write(histogramIndex) // some spacing to make it look nice inOutFile.write(" ") // figure out how many X’s I need var outputX = inHistogram[histogramIndex] / largestCount * 100 // output the X’s for (var a = 0; a < outputX; a++) inOutFile.write("X") inOutFile.write("\n") } inOutFile.write("\n") }
... View more