|
| 1 | +app.bringToFront(); |
| 2 | +$.level = 0; // debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning) |
| 3 | + |
| 4 | +function getPixels32( doc ){ |
| 5 | + var origRuler = app.preferences.rulerUnits; |
| 6 | + var origDialogs = app.displayDialogs; |
| 7 | + app.preferences.rulerUnits = Units.PIXELS; |
| 8 | + app.displayDialogs = DialogModes.NO; |
| 9 | + |
| 10 | + var dup = doc.duplicate("tmpFlat",true); |
| 11 | + var w = dup.width.value; |
| 12 | + var h = dup.height.value; |
| 13 | + var rgba=[]; |
| 14 | + |
| 15 | + var sampler = dup.colorSamplers.add( [UnitValue(0.5,"px"), UnitValue(0.5,"px")] ); |
| 16 | + |
| 17 | + var px=0; |
| 18 | + for (var y=0;y<h;++y){ |
| 19 | + for (var x=0;x<w;++x){ |
| 20 | + sampler.move([UnitValue(x+0.5,"px"),UnitValue(y+0.5,"px")]); |
| 21 | + |
| 22 | + rgba[px ] = 0; |
| 23 | + rgba[px+1] = 0; |
| 24 | + rgba[px+2] = 0; |
| 25 | + try{ |
| 26 | + // The color sampler errors on fully-transparent pixels |
| 27 | + var rgb = sampler.color.rgb; |
| 28 | + rgba[px ] = rgb.red.toFixed(2).replace('.00',''); |
| 29 | + rgba[px+1] = rgb.green.toFixed(2).replace('.00',''); |
| 30 | + rgba[px+2] = rgb.blue.toFixed(2).replace('.00',''); |
| 31 | + }catch(e){} |
| 32 | + px += 4; |
| 33 | + } |
| 34 | + } |
| 35 | + |
| 36 | + var black = new SolidColor; |
| 37 | + black.rgb.red = black.rgb.green = black.rgb.blue = 0; |
| 38 | + dup.selection.selectAll(); |
| 39 | + dup.selection.fill(black,ColorBlendMode.NORMAL,100,true); |
| 40 | + dup.flatten(); |
| 41 | + |
| 42 | + var px=0; |
| 43 | + for (var y=0;y<h;++y){ |
| 44 | + for (var x=0;x<w;++x){ |
| 45 | + sampler.move([UnitValue(x+0.5,"px"),UnitValue(y+0.5,"px")]); |
| 46 | + rgba[px+3] = (255 - sampler.color.rgb.red).toFixed(2).replace('.00',''); |
| 47 | + px += 4; |
| 48 | + } |
| 49 | + } |
| 50 | + sampler.remove(); |
| 51 | + |
| 52 | + dup.close( SaveOptions.DONOTSAVECHANGES ); |
| 53 | + app.preferences.rulerUnits = origRuler; |
| 54 | + app.displayDialogs = origDialogs; |
| 55 | + |
| 56 | + return {width:w, height:h,rgba:rgba}; |
| 57 | +} |
| 58 | + |
| 59 | +var start = new Date; |
| 60 | +var px = getPixels32( app.activeDocument ); |
| 61 | +var lap = new Date; |
| 62 | +var readTime = (lap-start)/1000; |
| 63 | + |
| 64 | +var outFile = "/C/photoshop_colors.js"; |
| 65 | +var output = new File(outFile); |
| 66 | +output.open("w"); |
| 67 | +output.writeln("var img = {"); |
| 68 | +output.writeln("\twidth:"+px.width+",\n\theight:"+px.height+","); |
| 69 | +output.writeln("\trgba:["+px.rgba.join(',')+"]"); |
| 70 | +output.writeln("};"); |
| 71 | +output.close(); |
| 72 | +var stop = new Date; |
| 73 | +var writeTime = (stop-lap)/1000; |
| 74 | + |
| 75 | +var msg = "Read "+px.width*px.height+"pixels in "+readTime.toFixed(1)+"s"; |
| 76 | +msg += "\nWrote to '"+outFile+"' in "+writeTime.toFixed(1)+"s"; |
| 77 | +alert( msg ); |
0 commit comments