Photoshop Cs 4 Image Processor

Unable to use image processor feature in CS 4. Error message indicates "Cannot find javascript plug-in. This feature was working just fine until a few weeks ago. Nothing unusual has changed. Thanks

the folder must have moved or something...
here it is for now copy it to ... applications/adobe photoshop cs4/presets/scripts : and it will be a good time to see if that folder is even there.
Regards
G
// (c) Copyright 2006-2007.  Adobe Systems, Incorporated.  All rights reserved.
// Photomerge in ExtendScript.
// Translated from the original C++ automation & filter plugins
// John Peterson, Adobe Systems, 2006
// Adobe Patent or Adobe Patent Pending Invention Included Within this File
@@@BUILDINFO@@@ Photomerge.jsx 3.0.0.1
// BEGIN__HARVEST_EXCEPTION_ZSTRING
<javascriptresource>
<name>$$$/JavaScripts/Photomerge/Menu=Photomerge...</name>
<about>$$$/JavaScripts/Photomerge/About=Photomerge^r^rCopyright 2006-2008 Adobe Systems Incorporated. All rights reserved.^r^rCombines several photographs into one continuous image.</about>
<menu>automate</menu>
</javascriptresource>
// END__HARVEST_EXCEPTION_ZSTRING
// on localized builds we pull the $$$/Strings from a .dat file
$.localize = true;
// Put header files in a "Stack Scripts Only" folder.  The "...Only" tells
// PS not to place it in the menu.  For that reason, we do -not- localize that
// portion of the folder name.
var g_StackScriptFolderPath = app.path + "/"+ localize("$$$/ScriptingSupport/InstalledScripts=Presets/Scripts") + "/"
                                        + localize("$$$/Private/Exposuremerge/StackScriptOnly=Stack Scripts Only/");
$.evalFile(g_StackScriptFolderPath + "LatteUI.jsx");
$.evalFile(g_StackScriptFolderPath + "StackSupport.jsx");
$.evalFile(g_StackScriptFolderPath + "CreateImageStack.jsx");
$.evalFile(g_StackScriptFolderPath + "Geometry.jsx");
$.evalFile(g_StackScriptFolderPath + "PolyClip.jsx");
// debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)
// Must leave at zero, otherwise trapping gFileFromBridge fails on QA's debug builds.
$.level = 0; // (Window.version.search("d") != -1) ? 1 : 0;
// debugger; // launch debugger on next line
if (typeof(PMDebug) == 'undefined')
    var PMDebug = false;
// photomerge routines
// Debug - write the trapezoid in Matlab format
function dumpTrap( name, corners )
    var i;
    if (! PMDebug) return;
    $.write( name + "= [" );
    for (i in corners)
        $.write( ((i > 0) ? "; " : "" ) + corners[i].fX + " " + corners[i].fY );
    $.writeln( "];");
StackElement.prototype.dumpMLCorners = function()
    // Weed out file suffix (chokes matlab)
    dumpTrap( this.fName.match(/([^.]+)/)[1], this.fCorners );
// Set the fCorners of the layer to the bounds of the Photoshop layer.
StackElement.prototype.setCornersToLayerBounds = function( stackDoc )
    if (typeof(stackDoc) == "undefined")
        stackDoc = app.activeDocument;
    var bounds = stackDoc.layers[this.fName].bounds;
    this.fCorners = new Array();
    this.fCorners[0] = new TPoint( bounds[0].as("px"), bounds[1].as("px") );
    this.fCorners[2] = new TPoint( bounds[2].as("px"), bounds[3].as("px") );
    this.fCorners[1] = new TPoint( this.fCorners[2].fX, this.fCorners[0].fY );
    this.fCorners[3] = new TPoint( this.fCorners[0].fX, this.fCorners[2].fY );
// Add the corner data to the string of per-stackElement information
// that gets passed to the filter plugin
StackElement.prototype.addPieceData = function()
    if (typeof(this.fCorners) != "undefined")
        // Add corners in place of trailing '\n'
        this.fString = this.fString.slice(0,-1) + "fCorners=";
        for (j = 0; j < 4; j++)
            this.fString += " " + this.fCorners[j].fX.toString() + " " + this.fCorners[j].fY.toString();
        this.fString += "\t";
        if (typeof(this.fScale) != "undefined")
            this.fString += ("fScale=" + this.fScale.toString() + "\t");
        if ((typeof(this.fConnectedTo) != "undefined") && this.fConnectedTo)
            this.fString += "fConnectedTo=" + this.fConnectedTo.fLayerID + "\t";
        if (typeof(this.fLayerID) != "undefined")
            this.fString += "fLayerID=" + this.fLayerID.toString() + "\t";
        this.fString += "\n";
    else
        debugger;    // Corner data missing!
StackElement.prototype.overlapArea = function( other )
    if (other == this)
        return TPoint.polygonArea( this.fCorners );
    var overlapBounds = TRect.intersection( this.fBoundsCache, other.fBoundsCache );
    if (overlapBounds.isEmpty())
        return 0.0;
    var clipPoly = TPoint.intersectConvexPolygons( this.fCorners, other.fCorners );
    if (! clipPoly)
        return 0.0;
    else return TPoint.polygonArea( clipPoly );
// Find the points where the two quadrilaterals intersect (yes, eight is a theoretical max)
// Note situations where one piece intersects the same edge twice - special
// case handled by SoftEdgeBlend
StackElement.prototype.findQuadIntersections = function( other, intersections )
    var i, j;
    var curIntersections, numIntersections = 0;
    var innerEdgeIntersections = [ 0, 0, 0, 0 ];
    var outerEdgeIntersections = [ 0, 0, 0, 0 ];
    var thisEdge = false;
    var otherEdge = false;
    for (i = 0; i < 4; i++)
        var eb0 = other.fCorners[i];
        var eb1 = other.fCorners[(i + 1) > 3 ? 0 : i + 1];
        curIntersections = numIntersections;
        for (j = 0; j < 4; j++)
            var ed0 = this.fCorners[j];
            var ed1 = this.fCorners[(j + 1) > 3 ? 0 : j + 1];
            var cross = TPoint.lineSegmentIntersect( eb0, eb1, ed0, ed1 );
            if (cross != TPoint.kInfinite)
                intersections[numIntersections++] = cross;
                innerEdgeIntersections[j]++;
        outerEdgeIntersections[i] = numIntersections - curIntersections;
    if (numIntersections == 2)
        for (i = 0; i < 4; i++)
            if (innerEdgeIntersections[i] == 2) thisEdge = true;
            if (outerEdgeIntersections[i] == 2) otherEdge = true;
    return {"numIntersections":numIntersections, "thisEdge":thisEdge, "otherEdge":otherEdge};
// Look for a point of this that's inside the corners of other.
StackElement.prototype.findSingleInsidePoint = function( other )
    var i;
    var result = new Object();
    result.numFound = 0;
    for (i = 0; i < 4; i++)
        if (this.fCorners[i].pointInQuad( other.fCorners ))
            result.numFound++;
            result.insidePt = this.fCorners[i];
    return result;
// "Adobe patent application tracking # B349, entitled 'Method and apparatus for Layer-based Panorama Adjustment and Editing', inventor: John Peterson"
// Because we're dealing with quads, we can't use the simple scheme
// to generate blend rects that the rectangles use - black stuff
// from the rects will seep in. So instead, we use various heuristics to
// figure out how the quads themselves intersect.  This isn't too hard
// when there's just two intersection points (usual case), but there are
// some pathological cases where there are many more intersections (the octogon
// from one square 45 deg. off from another is the classic example).          
StackElement.prototype.softEdgeBlend = function( other, blendRad )
    var i, j;
    var intersections = new Array();    // Worst case is a square inside a 45 degree rot square
    // If there's no distortion, do the blend strictly on the rectangles
/*    if ((!IsQuadMapped() && !other->IsQuadMapped())
        || (IsRectilinear() && other->IsRectilinear()))
        Assert_( other->fWarpedRaster );
        fWarpedRaster->SoftEdgeBlendRasters( *(other->fWarpedRaster), blendRad );
        return;
    var bounds = this.getBounds();
    // Find the points where the two quadrilaterals intersect
    var intResult = this.findQuadIntersections( other, intersections );
    var numIntersections = intResult.numIntersections;
    var thisEdgeTwice = intResult.thisEdge;
    var otherEdgeTwice = intResult.otherEdge;
    var thisInsidePt = this.findSingleInsidePoint( other );
    var otherInsidePt = other.findSingleInsidePoint( this );
    // If quads don't overlap, just bail
    if (numIntersections == 0)
        return;
    // Handle cases where just one point overlaps the other piece
    var insidePoint;
    if (otherEdgeTwice || ((numIntersections == 2) && (thisInsidePt.numFound == 1)))
        insidePoint = thisInsidePt.insidePt;
        this.makeBlendTrapezoid( intersections[0], intersections[1], insidePoint, blendRad, false );
        return;
    if (thisEdgeTwice /*|| ((numIntersections == 2) && (otherInsidePt.numFound == 1))*/)
        insidePoint = otherInsidePt.insidePt;
        this.makeBlendTrapezoid( intersections[0], intersections[1], insidePoint, blendRad, false );
        return;
    // ...More than two corners overlap, apply heuristics to find reasonable blending
    $.bp( numIntersections > 8 );
    // If we got more than two points, pick the two furthest apart
    if (numIntersections > 2)
        var max0, max1;
        var maxDist = -1.0;
        for (i = 0; i < numIntersections - 1; i++)
            for (j = i + 1; j < numIntersections; j++)
                var dist = (intersections[i] - intersections[j]).vectorLength();
                if (dist > maxDist)
                    max0 = intersections[i];
                    max1 = intersections[j];
                    maxDist = dist;
        $.bp( maxDist <= -1.0 );
        intersections[0] = max0;
        intersections[1] = max1;
        numIntersections = 2;
    TPoint.clipLineToRect( bounds, intersections[0], intersections[1] );
    // The point furthest away from the cut line on the "other" image
    // is the one that we blend toward (the "dark" corner).
    var maxPoint = 0, maxDist = -1;
    for (i = 0; i < 4; i++)
        var dist = Math.abs( other.fCorners[i].distanceToLine( intersections[0], intersections[1] ) );
        if (dist > maxDist)
            maxDist = dist;
            maxPoint = i;
    this.makeBlendTrapezoid( intersections[0], intersections[1], other.fCorners[maxPoint], blendRad, true );
// "Adobe patent application tracking # B349, entitled 'Method and apparatus for Layer-based Panorama Adjustment and Editing', inventor: John Peterson"
// Create a layer mask that fades out from the edge0,edge1 cutline towards "insidePt"
// If two points are inside, construct the mask fade from the edge of the image.
//                       insidePt
//             |            *           |
//             |           / \          |
//             |          /   \         |
// insetLine-> |       +-/-----\-+      |  --
//             |       |/       \|      |   | radius
// baseLine->  +-------*---------*------+  --
//                    /edge0      \edge1
StackElement.prototype.makeBlendTrapezoid = function( edge0, edge1, insidePt, radius, useCorners )
    function sgn(x) { if (x < 0) return -1; if (x > 0) return 1; return 0; }
    function wrap4(i, next)
        i += next;
        if (i > 3) return i % 4;
        if (i < 0) return 3;
        return i;
    // Create a layer mask
    selectOneLayer( app.activeDocument, this.fName );
//    app.activeDocument.activeLayer = app.activeDocument.layers[this.fName];    // Broken if multiple layers selected.
    createLayerMask();    // Does nothing if the layer already has a mask
    // Create vector perpendicular to edge towards insidePt
    var edgeDir = edge1 - edge0;
    var blendDir = new TPoint( -edgeDir.fY, edgeDir.fX );
    blendDir /= blendDir.vectorLength();    // Make unit length
    // Make a polygonal selection covering the area
    var dist = insidePt.distanceToLine( edge0, edge1 );
    var blendOffset = blendDir * dist;
    var blendBox;
    if (! useCorners)
        blendBox = [edge0, edge0+blendOffset, edge1+blendOffset, edge1, edge0];
    else
        // If the cutline slices across the image (two points on each side), then
        //        - Look for the edge edge0 is on
        //        - Figure out which corner is on the same side as "insdePt"
        //        - Construct the blendBox from that.
        var i, nextPtInd;
        for (i = 0; i < 4; i++)
            if (edge0.distanceToLine( this.fCorners[i], this.fCorners[wrap4(i,1)] ) < 0.0001 )
                if (this.fCorners[i].sideOf( edge0, edge1 ) == sgn( dist ))
                    nextPtInd = -1;
                else
                    nextPtInd = 1;
                blendBox = new Array();
                blendBox[0] = edge0;
                blendBox[1] = (nextPtInd < 0) ? this.fCorners[i] : this.fCorners[i+1];
                blendBox[2] = (nextPtInd < 0) ? this.fCorners[wrap4(i, -1)] : this.fCorners[wrap4(i, 2)];
                blendBox[3] = edge1;
                break;
        $.bp( i == 4 );    // Never found edge0?
    createPolygonSelection( blendBox );
    // Fill it.
    var midPoint = (edge0 + edge1) * 0.5;
    gradientFillLayerMask( midPoint, midPoint + blendDir * radius * sgn(dist) );
    app.activeDocument.selection.deselect();
// Photomerge base class
const kPhotomergeAdvancedBlendingFlag = app.stringIDToTypeID( "PhotomergeAdvancedBlendingFlag" );  
photomerge = new ImageStackCreator( localize("$$$/AdobePlugin/Shared/Photomerge/Process/Name=Photomerge"),
                                          localize('$$$/AdobePlugin/Shared/Photomerge/Auto/untitled=Untitled_Panorama' ), null );
// For now, alignment is turned OFF, because we want to
// invoke it independantly.             
photomerge.useAlignment            = false;    // We do the alignment, not PS
photomerge.hideAlignment        = true;
photomerge.mustBeSameSize        = false;
photomerge.mustBeUnmodifiedRaw = false;
photomerge.mustNotBe32Bit        = ! app.featureEnabled(localize("$$$/private/32BitLayersFeature=32-Bit Layers"));
photomerge.radioButtons = ["_LOauto", "_LOperspective", "_LOcylindrical", "_LOspherical", "_LOcollage", "_LOnormal", "_LOinteractive"];
photomerge.interactiveFlag        = false;
photomerge.alignmentKey            = "Auto";    // Defaults to perspective
photomerge.compositionFile        = null;
photomerge.advancedBlending        = true;
photomerge.lensCorrection        = false;
photomerge.removeVignette        = false;
try {
// We want to steer people to the advanced blending option,
// so have it be on by default, rather than sticky.
//    var desc = app.getCustomOptions("PhotomergeFlags001");
//    photomerge.advancedBlending = desc.getBoolean( kPhotomergeAdvancedBlendingFlag );
catch (e)
// Get the bounds of all of the stackElements.
photomerge.getBounds = function()
    var i;
    for (i in this.stackElements)
        if (i == 0)
            this.fBounds = this.stackElements[i].getBounds();
        else
            this.fBounds.extendTo( this.stackElements[i].getBounds() );
    return this.fBounds;
// Align selected layers by content (uses SIFT registration in Photoshop core)
// This just returns the alignment data, it does not actually transform the layers
// unless doTransform is true
photomerge.getAlignmentInfo = function( stackDoc, doTransform )
    selectAllLayers(stackDoc, 1);
    const kMargin = 10;
    function offsetGroup( delta, group )
        group.bounds.offset( delta );
        var k;
        for (k = 0; k < group.layers.length; ++k)
            group.layers[k].offset( delta );
            if (doTransform)
                selectOneLayer( stackDoc, group.layers[k].fName );
                // Translate gets broken when document DPI isn't 72 DPI...(PR 1417264)
//                activeDocument.activeLayer.translate( UnitValue( delta.fX, "px" ), UnitValue( delta.fY, "px" ) );   
                translateActiveLayer( delta.fX, delta.fY );
    var i, j, alignInfo;
    var alignmentFlags = [];
    if (this.lensCorrection) alignmentFlags.push(kradialDistortStr);
    if (this.removeVignette) alignmentFlags.push(kvignetteStr);
    alignInfo = getActiveDocAlignmentInfo( this.alignmentKey, doTransform, alignmentFlags );
    // If the alignment fails completely, fake up a plan B...
    // For now, just set the images side by side.
    if (! alignInfo)
        alert(localize("$$$/AdobePlugin/Shared/Photomerge/alignbad=Some images could not be automatically aligned"));
        var xpos = 0;
        for (i in this.stackElements)
            this.stackElements[i].setCornersToSize();
            this.stackElements[i].offset( new TPoint( xpos, 0 ) );
            xpos += this.stackElements[i].getBounds().getWidth() + kMargin;
        this.fGroups = null;
    else
        var layerList = alignInfo.layerInfo;
        this.fGroups = new Array();
        for (i = 0; i < layerList.length; ++i)
            // Note we depend on stackElement's order matching
            // the document's sheet list!
            var curGroup = layerList[i].groupNum;
            if (!doTransform && (layerList[i].corners.length > 0))
                this.stackElements[i].fCorners = layerList[i].corners;
            else
                this.stackElements[i].setCornersToLayerBounds( stackDoc );
            this.stackElements[i].fAlignGroup = curGroup;
            this.stackElements[i].fBaseFlag = layerList[i].baseFlag;
            if (typeof(this.fGroups[curGroup]) == "undefined")
                this.fGroups[curGroup] = new Object();
                this.fGroups[curGroup].hasCorners = layerList[i].corners.length > 0;
                this.fGroups[curGroup].bounds = this.stackElements[i].getBounds();
                this.fGroups[curGroup].layers = new Array();
                this.fGroups[curGroup].xformType = layerList[i].xformType;
            else
                this.fGroups[curGroup].bounds.extendTo( this.stackElements[i].getBounds() );
            this.fGroups[curGroup].layers.push( this.stackElements[i] );
        // Now move the groups into  place
        // Note carefully: if the corners were given, then the group is already
        // transformed into the proper spot, and we just need to move the corners to
        // match.  So shut off moving the layer pixels around from here on out.
        offsetGroup( -this.fGroups[0].bounds.getTopLeft(), this.fGroups[0] );
        for (i = 1; i < alignInfo.numGroups; ++i)
            var spacing = Math.round(this.fGroups[i-1].bounds.getHeight() / 10.0);
            offsetGroup( -this.fGroups[i].bounds.getTopLeft() + new TPoint(0, spacing + Math.round(this.fGroups[i-1].bounds.fBottom)),
                           this.fGroups[i] );
    this.getBounds();
// The original Photomerge plugin needs to have the "connectivity" of the
// pieces when in perspective mode, i.e., a pieces distortion is based
// on the distortion of the one it overlaps most.  This takes the
// "base" piece information from the PS core and uses overlap area to
// determine this.
photomerge.setupConnectivity = function()
    var i;
    // See if stackElem is connected to the "base".  If "without"
    // is given, then the path to the base must not use "without"
    function isConnectedToBase( stackElem, without, dbg_count )
        if (typeof(dbg_count) == "undefined")
            dbg_count = 0;
        if (typeof(without) == "undefined")
            without = null;
        $.bp( dbg_count > 150 );    // oops, got stuck in a loop...
        if (stackElem == null)
            return false;
        if (stackElem == without)
            return false;
        if (stackElem.fConnectedTo == stackElem)
            return true;        // Already at base
        return isConnectedToBase( stackElem.fConnectedTo, without, dbg_count + 1 );
    // Initialize
    for (i in this.stackElements)
        this.stackElements[i].fBoundsCache = this.stackElements[i].getBounds();
        this.stackElements[i].fLayerID = i;
        // Bases connect to themselves.
        this.stackElements[i].fConnectedTo = this.stackElements[i].fBaseFlag ? this.stackElements[i] : null;
        this.stackElements[i].fNeighborOverlap = 0;
    // Create a connection table based on the overlap of the pieces
    var g, i, j, baseInd = -1;
    if (this.fGroups)
        for (g in this.fGroups)
            var group = this.fGroups[g];
            var connections = new Array();
            var numLayers = group.layers.length;
            // Ignore orphan images
            if (numLayers < 2)
                group.layers[0].fBaseFlag = false;
                group.layers[0].fConnectedTo = null;
                continue;
            // If there's no perspective, there's no connections ("0" is kProjective in UAlignment.h)
            if (group.xformType != 0)
                for (i = 0; i < numLayers; ++i)
                    group.layers[i].fBaseFlag = false;
                    group.layers[i].fConnectedTo = group.layers[i];
                continue;
            for (i = 0; i < numLayers; ++i)
                if (group.layers[i].fBaseFlag)
                    baseInd = i;
                connections[i] = new Array();
                group.layers[i].fGroupIndex = i;
                if (i > 0)
                    for (j = 0; j < i; ++j)
                        connections[i][j] = group.layers[i].overlapArea( group.layers[j] );
                        connections[j][i] = connections[i][j];    // table is symentric
            $.bp( baseInd == -1 );    // Never found the base?
            // Debug - dump the connection table
    /*        for (i = 0; i < numLayers; ++i)
                var s = "";
                for (j = 0; j < numLayers; ++j)
                    s += ", " + Math.floor(connections[i][j]);
                $.writeln(s);
            // Connect everything to the base that's connected.
            for (i = 0; i < numLayers; ++i)
                if ((i != baseInd) && (connections[baseInd][i] > 0))
                    group.layers[i].fConnectedTo = group.layers[baseInd];
                    group.layers[i].fNeighborOverlap = connections[baseInd][i];
            // Walk the cconnectivity table and make sure everything is
            // "optimally" connected.
            var changes = false;
            do {
                changes = false;
                for (i = 0; i < numLayers; ++i)
                    if (i != baseInd)
                        var curLayer = group.layers[i];
                        for (j = 0; j < numLayers; ++j)
                            if (((j != baseInd) && (j != i))
                                && (((connections[i][j] > curLayer.fNeighborOverlap)
                                        && isConnectedToBase( group.layers[j], curLayer ))))
                                curLayer.fConnectedTo = group.layers[j];
                                curLayer.fNeighborOverlap = connections[i][j];
                                changes = true;
            } while (changes);
    //        for (i = 0; i < numLayers; ++i)
    //            $.writeln( group.layers[i].fName + " is connected to " + (group.layers[i].fConnectedTo ? group.layers[i].fConnectedTo.fName : "??") );
photomerge.offsetStack = function( delta )
    for (i in this.stackElements)
        this.stackElements[i].offset( delta );
    this.fBounds.offset( delta );
photomerge.scaleStack = function( s )
    for (i in this.stackElements)
        this.stackElements[i].scale( s );
    this.getBounds();
// This gets executed before a filter plugin is invoked.  "desc"
// allows passing parameters to the filter.
photomerge.customPluginArguments = function( desc )
    var f = new File(this.stackElements[0].fFullName);
    var path = File.encode( f.parent.fsName ) + (File.fs == "Windows" ? "\\" : "/");
    desc.putString( app.charIDToTypeID('PMfp'), path );
    if (this.compositionFile)
        desc.putString( app.charIDToTypeID('PMrf'), this.compositionFile.fsName );
        desc.putString( app.charIDToTypeID('PMcf'), File.encode( this.compositionFile.fsName ) );
photomerge.callInteractivePlugin = function( stackDoc )
    // Scale the results to fit the screen
/*        var scaleFactor = 1.0, screenSize = primaryScreenDimensions() * 0.75;
    if (this.fBounds.getHeight() > this.fBounds.getWidth())
        if (this.fBounds.getHeight() > screenSize.fY)
            scaleFactor = screenSize.fY / this.fBounds.getHeight();
    else
        if (this.fBounds.getWidth() > screenSize.fX)
            scaleFactor = screenSize.fX / this.fBounds.getWidth();
    const kMaxPieceSize = 1024;        // Must match value in PhotomergeUI.cpp
    var i;
    // The old plugin insists on eight bit data.
    if (stackDoc.bitsPerChannel != BitsPerChannelType.EIGHT)
        stackDoc.bitsPerChannel = BitsPerChannelType.EIGHT;
        this.stackDepthChanged = true;
    if (this.compositionFile == null)
        // Make sure the quad coordinates coorespond to the scale used by the UI plugin
        var maxPieceSize = 0;
        for (i in this.stackElements)
            maxPieceSize = Math.max( Math.max( this.stackElements[i].fWidth, this.stackElements[i].fHeight ), maxPieceSize );
        var mipLevel = 0;
        while (maxPieceSize >> mipLevel > kMaxPieceSize)
            mipLevel++;
        var imageReduction = 1.0 / (1 << mipLevel);
        this.offsetStack( -this.fBounds.getCenter() );
        this.scaleStack( imageReduction );
        this.offsetStack( -this.fBounds.getTopLeft() );
        this.setupConnectivity();
        // Add the additional per-piece metadata to pass to the filter plugin
        for (i in this.stackElements)
            this.stackElements[i].addPieceData();
    // Make the result layer active
    app.activeDocument.activeLayer = app.activeDocument.layers[app.activeDocument.layers.length -1];
    // Note: we need an "unmodified" flag, so if no
    // changes are made we skip the data recovery step...
    var result, err;
    try {
        result = this.invokeFilterPlugin( "AdobePhotomergeUI4SCRIPT", DialogModes.ALL );
    catch (err)
        result = null;
    if (result == null)        // Cancelled / bombed out
        stackDoc.close(SaveOptions.DONOTSAVECHANGES);
        return null;
    // Extract the data from the plugin
    var modifiedPieceInfo = result.getString( app.charIDToTypeID('PSpc') ).split('\n');
    for (i in modifiedPieceInfo)
        // If we loaded a composition (.pmg) file, we won't have corners yet.
        if (typeof(this.stackElements[i].fCorners) == "undefined")
            this.stackElements[i].fCorners = new Array();
        var j, pieceData = modifiedPieceInfo[i].split('\t');
        for (j in pieceData)
            var k, pair = pieceData[j].split('=');
            if (pair[0] == 'fUsed')
                this.stackElements[i].fUsed = eval(pair[1]);
            if (pair[0] == 'fCorners')
                var coords = pair[1].split(/\s+/).slice(1);
                for (k = 0; k < 4; k++)
                    this.stackElements[i].fCorners[k] = new TPoint( Number(coords[k*2]), Number(coords[k*2+1]) );
    // Remove unused photos
    for (i = 0; i < this.stackElements.length; ++i)
        if (! this.stackElements[i].fUsed)
            stackDoc.layers[(this.stackElements.length-1)-i].remove();
            this.stackElements.splice(i,1);
            i--;
    // Hey...it could happen.
    if (this.stackElements.length < 2)
        return null;
    // If we run the UI, we're restricted to an eight bit stack.
    // If the source images were higher, we need to reload the image stack.
    if (this.stackDepthChanged)
        stackDoc.close(SaveOptions.DONOTSAVECHANGES);
        stackDoc = this.loadStackLayers();
    this.getBounds();        // Update w/new corner data
    return stackDoc;
// "Adobe patent application tracking # B349, entitled 'Method and apparatus for Layer-based Panorama Adjustment and Editing', inventor: John Peterson"
// Use the geometry of the overlapping pieces to create
// simple rectangular blend masks.
photomerge.quickBlend = function()
    var i, j;
    var blendRadius = Math.round(Math.min(this.stackElements[0].fWidth, this.stackElements[0].fHeight) / 10.0);
    if (PMDebug)
        for (i in this.stackElements)
            this.stackElements[i].dumpMLCorners();
    // Set up progress bar for blending
    // The progress bar doesn't work - there's know way in ScriptUI to force it to update.
/*    var progressWindow = latteUI( g_StackScriptFolderPath + "PMBlendingProgress.exv" );
    var num = this.stackElements.length;
    var progressBar = progressWindow.findControl('_progress');
    progressBar.maxvalue = (num * (num + 1)) / 2;
    num = 0;
    progressWindow.center();
    progressWindow.show();
    // Blend the i'th piece against the 0..i-1 pieces below it
    for (i = this.stackElements.length-1; i > 0; --i)
        for (j = i-1; j >= 0; j--)
//            num++;
//            progressBar.value = num; // ScriptUI bug - there's no way to force this to update.
            this.stackElements[i].softEdgeBlend( this.stackElements[j], blendRadius );
//    progressWindow.close();
// Wrap the advancedBlend in a try/catch so errors (i.e., user cancel)
// just stop the blend process.
photomerge.advancedBlend = function( stackDoc )
    try {
        selectAllLayers(stackDoc, 1);
        advancedMergeLayers();
    catch (err)
// With the stack elements specified, this
// portion actually creates the Panorama.
// Returns boolean indicating success/failure
photomerge.doPanorama = function()
    var i, stackDoc = null;
    function primaryScreenDimensions()
        var i;
        for (i in $.screens)
            if ($.screens[i].primary)
                return new TPoint( $.screens[i].right - $.screens[i].left,
                                      $.screens[i].bottom - $.screens[i].top );
    function resizeCanvasToFitPano()
        // Extend the canvas to hold the panorama
        var w = UnitValue( photomerge.getBounds().getWidth(), "px" );
        var h = UnitValue( photomerge.getBounds().getHeight(), "px" );
        app.activeDocument.resizeCanvas( w, h, AnchorPosition.TOPLEFT );
    if (this.interactiveFlag)
        // Filter must have eight bit depth and RGB color space
        stackDoc = this.loadStackLayers( BitsPerChannelType.EIGHT );
        stackDoc.changeMode(ChangeMode.RGB);
    else
        stackDoc = this.loadStackLayers();
    if (! stackDoc)
        return false;
    // Remove spurious last layer (not needed by Photomerge)
    if (app.activeDocument.layers[app.activeDocument.layers.length-1].name == this.pluginName)
        app.activeDocument.layers[app.activeDocument.layers.length-1].remove();
    // The UI needs everything in the top left corner
    if (this.interactiveFlag)
        for (i = 0; i < stackDoc.layers.length; ++i)
            var xoff = stackDoc.layers[i].bounds[0].as("px");
            var yoff = stackDoc.layers[i].bounds[1].as("px");
            if ((xoff != 0) || (yoff != 0))
                stackDoc.layers[i].translate( UnitValue( -xoff, "px" ), UnitValue( -yoff, "px" ) );
    // Sort out exactly what operations we want to do.
    if (! this.interactiveFlag)
        selectAllLayers(stackDoc, 1);
        this.getAlignmentInfo( stackDoc, true );
        resizeCanvasToFitPano();
        if (this.advancedBlending)
            stackDoc.changeMode( ChangeMode.RGB );    // Auto-blend requires  RGB
            this.advancedBlend( stackDoc );
// The Advanced blending works so well that there's little point
// in having the rectangular gradient blends anymore.  Uncomment the
// following two lines if you still want them (see similar code below
// for the interactive case).
//        else
//            this.quickBlend();
        purgeHistoryStates();
        return true;
    // Interactive happens here
    if (this.compositionFile == null)
        this.getAlignmentInfo( stackDoc, false );   
        // With the corners computed by getAlignmentInfo,
        // find the bounds and use that to slide the images
        // over so their bounds has origin 0,0 (top left)
        this.offsetStack( -this.fBounds.getTopLeft() );
    if (this.interactiveFlag)
        stackDoc = this.callInteractivePlugin( stackDoc );
    if (stackDoc == null)
        return false;
    resizeCanvasToFitPano();
    // Now apply the transformation to the pieces
    for (i in this.stackElements)
        this.stackElements[i].transform();
    if (this.advancedBlending)
        selectAllLayers( stackDoc, 1 );
        stackDoc.changeMode( ChangeMode.RGB );    // Auto-blend requires  RGB
        advancedMergeLayers();
// The new "advanced blending" works well enough that there's
// little point in invoking the rectangular gradient blends anymore.
// If you really want them, you can uncomment the two lines below.
//    else
//        this.quickBlend();
    purgeHistoryStates();
    return true;
// Extra group breaks the main dialog's radio buttons,
// so we manually implement it here (ScriptUI lossage)
// NOTE: When called, this is a member function of radioControl,
// -not- photomerge.  JavaScript voodoo.
photomerge.radioClick = function()
    var w = this.window;
    var i;
    // Some of the transforms don't allow lens correction...
    var allowLensCor = ((this.button_id != '_LOnormal')
                        && (this.button_id != '_LOcollage')
                        && (this.button_id != '_LOinteractive'));
    w.findControl('_useLensCorrection').enabled = allowLensCor;
    w.findControl('_removeVignette').enabled = allowLensCor;
    // Be aggressive about it...
    if (! allowLensCor)
        w.findControl('_useLensCorrection').value = false;
        w.findControl('_removeVignette').value = false;
    for (i in photomerge.radioButtons)
        var b = w.findControl(photomerge.radioButtons[i]);
        if (b != this)
            b.value = false;
// Callback when "Load Composition" is clicked.
// NOTE: When called, this is a member function of buttonControl,
// -not- photomerge.  JavaScript voodoo.
photomerge.loadCompositionClick = function()
    function MacPMGType( f )
        if (f.type == 'PhMg')
            return true;
        var match = f.name.match(/.*[.](.+)$/);
        var suffix = match != null ? match[1].toLowerCase() : "";
        if (suffix == "pmg")
            return true;
        if (f instanceof Folder)
            // If the item is an app or a bundle it will be an
            // instance of folder. If we return true it will
            // appear as an enabled item. While the OS will not
            // let the user navigate into it, it is better to
            // have it appear as disabled.
            if (suffix.match(/app|bundle/i) != null)
                // Do not navigate folders that end in .app or .bundle
                return false;
            // navigate any other folder
            return true;
        // some unknown file type/suffix
        return false;
    var fileType = File.fs == "Windows" ? localize("$$$/AdobePlugin/Shared/Photomerge/Auto/Win=Photomerge Compositions:*.pmg")
                                    : MacPMGType;
    photomerge.compositionFile = File.openDialog( localize("$$$/AdobePlugin/Photomerge/LoadComp=Load Photomerge Composition"), fileType );
    if (photomerge.compositionFile == null || !photomerge.compositionFile.open("r"))
        return;
    var line = photomerge.compositionFile.readln();
    if (! line.match(/^VIS/))
        alert( this.pluginName + localize("$$$/AdobePlugin/Photomerge/BadComp=The Composition file is corrupt"), this.pluginName, true );
        return;
    // Read through the composition file and extract the file paths in it.
    var mergeFiles = new Array();
    while (! photomerge.compositionFile.eof)
        line = photomerge.compositionFile.readln();
        var f = line.match(/^\s*PATH\s+<([^>]+)/);
        if (f)
            // If no file path delimiters, image paths are assumed relative to the composition file
            var relPath = (f[1].indexOf( (File.fs == "Windows") ? "\\" : "/" ) < 0);
            f = (relPath ? photomerge.compositionFile.path + "/" : "") + f[1];
            mergeFiles.push( new StackElement( new File(f) ) );
    if (mergeFiles.length < 2)
        alert( this.pluginName + localize("$$$/AdobePlugin/Photomerge/BadComp=The Composition file is corrupt"), this.pluginName, true );
        return;
    photomerge.stackElements = mergeFiles;
    photomerge.interactiveFlag = true;
    this.window.close(kFilesFromPMLoad);
// Set up the radio buttons
photomerge.customDialogSetup = function( w )
    var i, button;
    for (i in this.radioButtons)
        button = w.findControl(this.radioButtons[i]);
        button.onClick = this.radioClick;
        // Flag with name so we can identify it in radioClick
        button.button_id = this.radioButtons[i];
    // Missing feature: We should query the selected file's metadata and
    // automatically turn on the '_useLensCorrection' checkbox if the
    // file has the proper support for it.
    w.findControl("_loadcomp").onClick = this.loadCompositionClick;
    // Julie didn't like the intro line; nuke it here because stackDialog looks for it.
    w.findControl("_intro").parent.remove(['_intro']);
    var size = w.findControl("_fileList").size;
    size[1] += 20;
    w.findControl("_LOauto").value = true;        // Set default
    w.findControl("_advancedBlend").value = this.advancedBlending;
    // If the PhotomergeUI or ADM plugins aren't there, don't display the option for it.
    if ((app.systemInformation.search(/PhotomergeUI/) < 0) || (app.systemInformation.search(/ADM /) < 0))
       w.findControl("_PMInteractive").hide();
       w.findControl("_loadcomp").hide();
// Called by the dialog on closing to collect the results
photomerge.customDialogFunction = function( w )
    if (w.findControl("_LOinteractive").value)
        this.interactiveFlag = true;
        this.alignmentKey = 'interactive';
    else
        var i, d = [{k:"_LOauto",v:"Auto"},{k:"_LOnormal",v:"translation"},{k:"_LOperspective",v:"Prsp"},{k: "_LOcylindrical",v:"cylindrical"},{k:"_LOspherical",v:"spherical"},{k:"_LOcollage",v:"scen eCollage"}];
        for (i in d)
            if (w.findControl(d[i].k).value)
                this.alignmentKey = d[i].v;
                break;
    this.advancedBlending = w.findControl("_advancedBlend").value;
    this.lensCorrection = w.findControl("_useLensCorrection").value;
    this.removeVignette = w.findControl("_removeVignette").value;
// "Main" execution of Photomerge from the menu
photomerge.doInteractivePano = function ()
    // Because of the ",true", the dialog is pre-loaded with any bridge files.
    this.getFilesFromBridgeOrDialog( localize("$$$/Private/Photomerge/PMDialogexv=PMDialog.exv"), true );
    try {
        if (this.stackElements && this.doPanorama())
            fitViewOnScreen();
            var flagDesc = new ActionDescriptor();
            flagDesc.putBoolean( kPhotomergeAdvancedBlendingFlag, photomerge.advancedBlending );
            app.putCustomOptions( "PhotomergeFlags001", flagDesc, true );
    catch (err)
        if (this.stackDoc)
            this.stackDoc.close(SaveOptions.DONOTSAVECHANGES)
// Use this version to call Photomerge from a script.
photomerge.createPanorama = function(filelist, displayDialog)
    this.interactiveFlag = (typeof(displayDialog) == 'boolean') ? displayDialog : false;
    if (filelist.length < 2)
        alert(localize("$$$/AdobePlugin/Shared/Photomerge/AtLeast2=Photomerge needs at least two files selected."), this.pluginName, true );
        return;
    var j;
    this.stackElements = new Array();
    for (j in filelist)
        var f = filelist[j];
        this.stackElements.push( new StackElement( (typeof(f) == 'string') ? File(f) : f ) );
    if (this.stackElements.length > 1)
        this.doPanorama();
if ((typeof(runphotomergeFromScript) == 'undefined')
    || (runphotomergeFromScript==false))
    photomerge.doInteractivePano();

Similar Messages

  • I can't get Dr Browns Image Processor Pro to work from Bridge with Photoshop CC 2014

    We use the wonderful DR Browns Image Processor Pro script a lot, but cannot get it to work from Bridge with PS CC 2014. When I select files in Bridge CC and then go to Tools> Dr Browns Services 2.3.1 > Image Processor Pro it just pops up an error message that says ReferenceError: photoshop is undefined.
    The actual script works fine if I launch it from Photoshop CC 2014 - just not if I load it from Bridge CC.
    I have unistalled it and re installed a few times, both manually and through the Extension Manager CC.
    I am using a Win 7 64bit computer.
    I assume there is some change in the scripting part that loads Photoshop from bridge but not sure. It worked fine in CC. Just not CC 2014.
    I opened the Dr Browns Services .jsx file but don't see anything obvious. This is the section related to the Image Processor Pro part:
      // This routine takes an array of files. If called by Photoshop,
      // it will invoke Dr. Brown's Process 1-2-3 with the files. If called by
      // any other app, it will send a BridgeTalk message to Photoshop
      // to invoke this routine with the same arguments.
    drbrownserv.process123 = function (files) {
    // Bring Photoshop to the foreground.
      BridgeTalk.bringToFront ("photoshop");
      // Create a new BridgeTalk message for Photoshop to invoke
      // Image Processor with the selected files
      var btMessage = new BridgeTalk;
    btMessage.target = "photoshop";
      btMessage.body = "drbrownserv.process123 (" + files.toSource () + ");";
      btMessage.send ();
      } else {
    photoshop.runActionCommand ('611736f0-9c46-11e0-aa82-0800200c9a66', files);
      catch (error) {
      if (error.number != 8007) // Don't report user cancelled errors.
      drbrownserv.alert (error);

    I copied that .jsx file to a new name "Xbytor Image Processor Pro.jsx" edit that file changed the string Dr Browns services to "Xbytor Image Processor Pro" then commented out all the code that added tools menu items but "Image Processor Pro" and I put that file into
    "C:\Program Files (x86)\Common Files\Adobe\Startup Scripts CC\Adobe Bridge" even though Bridge CC is 64Bit seems to use theat location.
    Bridge CC was updated by the creative clouds update and opens Photoshop CC 2014 now

  • Problem using Image Processor from Bridge

    I have been using the Image Processor to process photos from Bridge for quite some time. However, I recently received an error message when I try to initiate Image Processor from Bridge and I have not been able to find any help topics that address my problem: I select images in Bridge to process, then click "Tools>Photoshop>Image Processor". Photoshop opens and the familiar Image Processor dialog box opens. Item 1 in the dialog box says "Process files from Bridge only" and has the number of files I have selected in parenteses. I select the file type and other settings in #3, and preferences in #4. When I click "Run", I get an error message window that says: "Script Alert. There were no source files that could be opened by Photoshop". The Image Processor works if I open the files in Photoshop first, then run it by selecting "File>Scripts>Image Processor" and tell it to process all open files.
    Would someone be able to help me with this problem?
    Thanks, Larry

    Usually when it worked before and not now, and you have added no new software or hardware I recommend resetting the preferences.  Hold down the Ctrl key and click on the Bridge icon to start.  You should get a reset window with 3 options.

  • Image Processor gives a slightly reddish hue to jpgs

    For some reason, my Photoshop's (CS4) Image  Processor gives jpgs a slightly reddish hue when compared to the hue in  for example Microsoft RAW Image Viewer (or the LCD display of the  camera). How come is this possible? Shouldn't the Image Processor be neutral in terms of colours?

    This is the page with info about your program:
    http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d48e808e-b10d-4ce4-a141-5866fd 4a3286&displaylang=en
    I noticed this line:
    Superior color fidelity. Windows Image Color Management (ICM) is used to render images in the correct color space as determined by the photographer when the image was captured.
    and these:
    Often likened to a ‘digital negative,’ a RAW image is the native image format for a growing number of quality digital cameras. RAW images typically contain the original camera sensor data recorded at the time of capture along with camera settings and other information. Using special PC software, photographers can “process” RAW images to vary the exposure, white balance, and other settings long after the image was captured. This creative flexibility and extra level of protection against mistakes are key reasons photographers choose to shoot RAW.

  • I've saved a 2 gigabite Photoshop  file (an illustration) to my desktop but when I dble-click on it , while Photoshop opens, the image does not.  It is still there  but how can I access it?

    AFter saving a very large file in photoshop Icant seem to call it up. DbLe clicking on the icon opens Photoshop but there is no evidence of the image. I have also triedaccessing it through the pull down menu in Photoshop and again, I can select it but it never appears. It's as though it is hidden somehow.

    Are you seeing anything in the layers panel when you open it?
    Can you open it in any other image editor or viewer?  2 GB is the upper limit for a psd. Maybe you should convert to tiff file format.
    Photoshop > File > Scripts > Image Processor will do this for you.
    Gene

  • Mountain Lion and Image Processor

    Found out on a brand new install of Mountain Lion and Adobe Photoshop CS6 that Image processor will not save any othe images processed.  Anybody else have this problem or anyone test this out for me??  Also is there a work around to this issue?

    Well, you adopted Mountain Lion on the very first day it became available.  Talk about early adopters! 
    Apple doesn't seem to get new major versions of OS X right until about the sixth dot-dot release.  That's why Lion wasn't and isn't reliable even at 10.7.4. 
    I'm sticking to Tiger 10.4.11 on my main Power Mac and have rigged a minimal Snow Leopard 10.6.8 system just to run ACR 7.x hosted by Photoshop 13 ("CS6").
    Leopard 10.5.x was awful, not just in dropping Classic Support but also in totally killing SCSI support.
    The two Lions are mainly concerned with compatibility with mobile devices like the iPad and the iPhone.
    The future of the desktop Mac as a serious computing platform seems doomed. 

  • Bridge 2014: where is image processor?

    Has this been removed?

    Presumably, I had the same issue with Bridge CC 2014; no Photoshop submenu under Tools after installing the CC 2014 programs, and uninstalling the older CC (2013) versions.
    I uninstalled Adobe Photoshop CC 2014 and reinstalled it, and the Tools->Photoshop menu (including Image Processor) reappeared.  I think other CC 2014 programs are also supposed to have entries under Tools in Bridge.  I guess I need to uninstall and reinstall more of CC 2014.

  • Problem with Adobe BRIDGE getting Photoshop/Image Processor menu

    When I open my drop-down or fly-out menu under TOOLS in Bridge (CS3 version), the entire portion of the menu which is supposed to appear next underneath the Cache line option is missing (i.e., Photoshop, Illustrator, InDesign, Start Meeting..., Photoshop services).
    What gives?
    I'm trying to get to Image Processor under the Photoshop menu option (which is supposed to appear in the Tools drop-down menu).
    Please tell me what's wrong. Thanks in advance.

    Thanks, but there IS no Photoshop subheading in my Tools menu.
    That exactly describes the problem I'm having!

  • Adobe Photoshop CS3 Image Processor not converting files to sRGB Profile

    I have been experiencing a problem with Photoshop CS3 Image Processor no longer converting profiles to sRGB.   It converts all of the files from Camera Raw to JPEG, but not sRGB as well.  I used to be able to batch convert an entire folder of RAW images to JPEG, sRGB through the Image Processor.
    My Photoshop CS3 Working Space is Adobe RGB (1998).  I need to convert an entire folder of images selected in Bridge to sRGB working space in order to publish a photo album from one of the on-line publishing companies.  I can open each individual Camera Raw file in Photoshop and convert each to JPEG, sRGB, but this takes a tremendous amount of time.
    The following procedure has worked for me in the past, but for some reason no longer works:
    I select the images in the desired Bridge CS3 folder.  Upper tool bar, "Tools" > "Photoshop" > "Image Processor".  In Image Processor:
    Section 1 - ""Process files from Bridge only (11)"  Whether or not I place a checkmark by "Open first image to apply settings", it makes no difference in the outcome.
    Section 2:  "Save in same location"
    Section 3 - "Checkmark by "Save as JPEG, quality 12".  Also a checkmark by "Convert Profile to sRGB"
    Section 4 - Checkmark by "Include ICC Profile"
    I replaced my iMac one month ago and reinstalled Photoshop CS3, but this Image Processor problem had been occurring even with my old computer.
    Not sure if you need this information:
    I'm currently on Mac OS X Version 10.6.4
    Processor:  2.93 Ghz Intel Core i7
    Memory:  8 GB 1333 Mhz DDR3
    I don't know if it's related,  Photoshop CS3 on my old computer was running in Rosetta.  I don't know if it's running in Rosetta now, the name does not appear when Photoshop boots up.  How do I get it to run in Rosetta again?

    Heh heh heh.  It's always true that we find the answer just after making public our problems, which in turn we did after trying to find the problems ourselves for hours.
    Thanks for following up with the answer.
    -Noel

  • Lightroom JPEG export VS Photoshop Image Processor

    Hey guys:
    Long time photoshop and lightroom user (long time user of all things Adobe). First post here in the forums. I did a search for my question but I think it was too specific, so it returned zero results.
    My question is about Lightroom's JPEG export vs Photoshops Image Processor. When I export a RAW file to JPEG from Lightroom, the file size is freaking huge. The JPEG is as big as my original RAW file (~25mb). Settings are set to default - 100 quality. Everything else remains untouched.
    However, when I use Photoshop's image processor (I launch it through Bridge, easier that way for me) and process the RAW images that way, my JPEGs are roughly 5-10mb in size. Settings in Image Processor are quality 10 and thats it. No actions being run or anything.
    Can anyone shed some light as to why Lightroom exports JPEGs that are roughly 2-4 times the size of Photoshop's JPEGs? My initial thoughts are that the 100 quality setting in Lightroom is more like Photoshop's quality 12 (that always makes me think of Spinal Tap - "Why don't you just make ten louder and make ten be the top number and make that a little louder?" "These go to eleven.") Ideally, exporting out of Lightroom would be much easier for my workflow.
    Thanks in advance.
    -The Doctor

    DrMilesBennell wrote:
    Can anyone shed some light as to why Lightroom exports JPEGs that are roughly 2-4 times the size of Photoshop's JPEGs? My initial thoughts are that the 100 quality setting in Lightroom is more like Photoshop's quality 12 (that always makes me think of Spinal Tap - "Why don't you just make ten louder and make ten be the top number and make that a little louder?" "These go to eleven.") Ideally, exporting out of Lightroom would be much easier for my workflow.
    You are correct: LR Quality 100 = PS Quality 12
    Despite LR having 101 Quality settings (0 to 100) it actually only has 12 Quality settings the same as PS 'Baseline Standard':
    JPEG Quality Setting Comparison
    PS
    LR
    LR Range
    Typical Reduction
    0
    0
    0-7%
    11%
    1
    10
    8-15%
    23%
    2
    20
    16-23%
    14%
    3
    30
    24-30%
    14%
    4
    35
    31-38%
    16%
    5
    40
    39-46%
    24%
    6
    50
    47-53%
    4%
    7
    55
    54-61%
    27%
    8
    65
    62-69%
    25%
    9
    70
    70-76%
    31%
    10
    80
    77-84%
    35%
    11
    90
    85-92%
    41%
    12
    100
    93-100%
    I keep a small copy of the above table taped to my monitor. I chose the numbers under the 'LR' column for the 12 steps (not AA's) to make it easier to remember. In actuality ANY number in the LR Range column will produce the same results for each step.
    Under the 'Typical Reduction' column notice the small amount of reduction for PS 6 (LR 47-53%) Quality setting. If interested why AND why you probably shouldn't use PS 7 (LR 54-61%) Quality setting see this post:
    http://forums.adobe.com/message/5641903#5641903

  • How to stop the Photoshop Image Processor.

    I am using the Photoshop Image Processor in Bridge to shrink a large png sequence. But I started the process with the incorrect parameters. How do I stop the Processor once it has started?

    If escape key does not work do not know how to undo.  Hopefully you have a backup.

  • Rotate to fit / photoshop image processor

    Anyone know what happened to the Rotate to Fit feature in bridge/tools/photoshop/image processor? I have to make several web photo galleries and this most important feature seems to be missing with CS4.

    To clarify - older photoshop (or bridge) programs, you could put in the dimensions you wanted and check a checkbox that said something like "rotate to fit". So if I entered 400x600px, then photoshop would make Portrait images 600 tall x 400 wide, and Landscape image 600 wide by 400 tall.
    Photoshop CS4 doesn't have that option so I have to go through all of my images, select all the landscape images, put in 600 wide x 400 tall, and run the script. Then gotta Go Back... select all of the Portrait images.. and run the script again but this time for 600 tall x 400 wide. Such a pain - gotta be a better way just haven't found it yet! help!

  • File Place does not appear on my menu. Neither does Tools Photoshop Image processor.

    In Bridge File>Place is grayed out on my menu. Tools>Photoshop>Image processor does not appear at all.  I have reset the preferences numerous times and am good to go until I shut down my computer.  When I reboot they are gone again.  I have a Mac with OS 10.10.2 (Yosemite) and CC. 

    Mardi Carter wrote:
    I shut down using "Shut Down" under the Apple menu.....always…
    Well, that's fine for the OS, but sometimes not so great for Photoshop.  Try QUITTING Photoshop from the Photoshop menu, or by Command Q, before you get anywhere near your Apple menu .
    Gene gave you sound advice, but don't forget to run Repair Permissions with Apple's Disk Utility before and after any installation, upgrade or update of the OS or any application.
    You'd think that shouldn't be necessary, but it is indeed vital, indispensable routine maintenance.
    Forget about "it had never happened before", Yosemite is a work in progress.  Apple never gets a major OS X release right until about the dot four or five release, so Yosemite has a way to go before it's at 10.10.4 or 10.10.5.  That has proven to be the nature of the beast.

  • Tools Photoshop Image Processor NG (CS5)

    From within Bridge CS5, the Image Processor does not bring up the options window.
    From within Bridge, if I select some images and then do: Tools > Photoshop > Image Processor...
    The next screen does not come up. Nothing happens.... the main menu goes gray, but nothing else happens. No other window pops up.
    In CS2 (I know, I'm a late adopter) the what-to-do with the selected images window pops up.
    Thanks,
    Drew

    I am on CS3 and will move to CS5 soon, once the initial frenzy dies.  But you say  you do this: Tools > Photoshop > Image Processor...
    The next screen  does not come up. Nothing happens.... the main menu goes gray, but  nothing else happens. No other window pops up.
    When you click on Image Processor Photoshop should load and then you get the Image Processor Menu.  Does it do this and then the Image Processor menu items are gray, so don't you get that far?
    Can you load the Image Processor from Photoshop?  (file/scripts/image processsor).

  • Problem with image processor - photoshop cs6

    Hi there .
    I am trying to automate - image processor. From open files i am just trying to save theese pdf's as jpg's. Should be straight forward but I get this error...
    "There were no source files that could be opened by Photoshop."
    Anyone know why? I saw one google someone suggesting to reset the preferences or someting but I so not know how to do this or if it will help...
    thanks.

    It look like both the Image Processor script and the Image Processor Pro script will not process open document that have no associated backing file.  When you open a PDF file and use options for Photoshop to use opening the PDF the documents that open are new document the source PDF files have been processes into a new documents that have not been saved so the open document has no associated backing file.
    I mad a simple test. Opened a PDF. Tried the two scripts they failed. Then I saved the open document and the ran the Image processor on the still open document that had been saved as a tif.  The image processor worked and saved a jpg.
    It may be possible to write a small script to save open Document as jpeg files and close the open documents or loop around the open document ring and just save document that have no backing file.
    You could also try using Paul Riggott PDF Processor script to do it all....

Maybe you are looking for