• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

My Photoshop script is giving different results on different machines

New Here ,
Oct 03, 2017 Oct 03, 2017

Copy link to clipboard

Copied

Hi all.  I want to preface this question by stating that I am by no means an artist, nor am I fluent in Photoshop.  Please be aware when answering that I may or may not know what you are talking about, so please be extremely explicit.

I recently wrote a script for some colleagues that goes through your current PSD and exports "Save For Web" all of the layers inside all of the visible Smart Objects.  So far, 4 people have tried to use the script, and it works as expected for 3 of us.  The 4th person just verified that he is up-to-date on Photoshop CC 2017 like the rest of us, and has reset his personal user preferences to mimic a fresh install like mine.  He is still getting different results than we are.  His exported .png dimensions are much smaller than they should be, and therefore is cropping a majority of the image. 

I am officially out of ideas, and without advanced knowledge of Photoshop, I don't have the slightest idea what could cause his results to be different, especially after a update and reset like he just did.  What other factors could cause such differences? How can I test for them? When identified, how can I account for them to avoid this issue in the future?  Thanks in advance.

Here is the script:

#target photoshop

var doc = app.activeDocument;

var parentLayers = doc.artLayers;

var EXPORT_PATH = doc.path + '/Exports/';

var options = new ExportOptionsSaveForWeb();

options.format = SaveDocumentType.PNG;

options.PNG8 = false;

options.transparency = true;

options.optimized = true;

var exportFolder = new Folder(EXPORT_PATH);

if (!exportFolder.exists)

{

    exportFolder.create();

}

for (var i = 0; i < parentLayers.length; i++)

{

    var parentLayer = parentLayers;

   

    if (parentLayer.visible && parentLayer.kind == LayerKind.SMARTOBJECT)

    {

        doc.activeLayer = parentLayer;

        EditSmartObject();

       

        var tempSmartObject = app.activeDocument;

        var childLayers = tempSmartObject.artLayers;

       

        for (var j = 0; j < childLayers.length; j++)

        {

            thisLayer = childLayers;

           

            if (thisLayer.visible)

            {

                thisLayer.copy();

               

                var newWidth = thisLayer.bounds[2] - thisLayer.bounds[0];

                var newHeight = thisLayer.bounds[3] - thisLayer.bounds[1];

               

                var newDoc = app.documents.add(newWidth, newHeight, 72, "temp", NewDocumentMode.RGB, DocumentFill.TRANSPARENT);

                newDoc.artLayers.add();

                newDoc.paste();

                newDoc.exportDocument(File(EXPORT_PATH + thisLayer.name +'.png'), ExportType.SAVEFORWEB, options);

                newDoc.close(SaveOptions.DONOTSAVECHANGES);   

            }

        }

        tempSmartObject.close(SaveOptions.DONOTSAVECHANGES);

    }

}

function EditSmartObject()

{

    var id = stringIDToTypeID( "placedLayerEditContents" );

    var desc = new ActionDescriptor();

    executeAction( id, desc, DialogModes.NO );

}

TOPICS
Actions and scripting

Views

480

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Oct 03, 2017 Oct 03, 2017

I would also put in a line to set your ruler units.

app.preferences.rulerUnits = Units.PIXELS;

Votes

Translate

Translate
Adobe
Community Expert ,
Oct 03, 2017 Oct 03, 2017

Copy link to clipboard

Copied

The first thing you need to check is they are processing exactly the sane document process by the others on they machines.  Document vary and all smart object are not created the same and in some cases Photoshop can not even process the file data in smart object properly Photoshop does not have the capability to for example process AI vector layers as  vector layers.  Processing what is in a smart object layer object is not alway possible to do with Photoshop.  What you are trying to do will not be always posible will be inpossible for things like placed SVG file Ai Files perhaps PDF and ESP files. You function name is EditSamrtObject biu its code does not look like you are even trying to open it to edit it. always in Photoshop a Place RAW file or a Raw file open as a smart Object will open in ACR and a Place AI file will open in AI.  Photoshop will update the object and render new pixels for the object if AI or ACR update the object work file Photoshop creates in you user temp space.  Are you trying to copy the smart layer into a new document somehow  all object are not strictly Photoshop Objects. Also If AI file are associated with Photoshop. Photoshop  does not support them well SVG file and AI file will open as a single Raster layer not multiple vector layers.

function EditSmartObject()

{

    var id = stringIDToTypeID( "placedLayerEditContents" );

    var desc = new ActionDescriptor();

    executeAction( id, desc, DialogModes.NO );

}

The Work File create for placeLayerEditContent will not always open in Photoshop.  The file may be a PSB or RAW an image file or Ai file there are many types of objects.

JJMack

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Oct 04, 2017 Oct 04, 2017

Copy link to clipboard

Copied

Thank you for the response.

To clarify, when I said 3 out of 4 people got the expected results, we all were running the script on the same PSD, so I would expect the same results from all 4 of us.

As far as the EditSmartObject function, that is an action that mimics double clicking on a SmartObject in Photoshop to open it in a new document.  When this happens, the new document with the expanded SmartObject layers becomes the activeDocument.  The very next line "var tempSmartObject = app.activeDocument;" grabs this new document and then begins to copy each layer inside that new SmartObject document and export them.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 04, 2017 Oct 04, 2017

Copy link to clipboard

Copied

Double clicking on an smart object in the layers palette will not alwaye open a  work document in Photoshop.  There  are many type of Objects not all are associated with Photoshop.  A place or open RAW object will onpen in ACR not Photoshop.  A placed Jpeg or Tiff may open in ACR depend one one ACR preferences.  A placed AI file may open in AI.

Here  I have a Placed jpeg and a placed tiff i now I Set my ACR preferences  to open TIFF and JPEFG files.

Capture.jpg

JJMack

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 03, 2017 Oct 03, 2017

Copy link to clipboard

Copied

I would also put in a line to set your ruler units.

app.preferences.rulerUnits = Units.PIXELS;

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Oct 04, 2017 Oct 04, 2017

Copy link to clipboard

Copied

Thanks for the response, I will give this a try.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Oct 04, 2017 Oct 04, 2017

Copy link to clipboard

Copied

Thank you very much Chuck, that was the issue we were encountering.  The person who was getting different results had their rulers set to inches, and the rest of us had pixels.

I added the following code to the top:

var userRulerPreference = app.preferences.rulerUnits;

app.preferences.rulerUnits = Units.PIXELS;

Then at the bottom:

app.preferences.rulerUnits = userRulerPreference;

This allowed everyone to get the same results without forcing people to use settings they don't like.

Thanks again!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 04, 2017 Oct 04, 2017

Copy link to clipboard

Copied

Glad it's resolved.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Oct 04, 2017 Oct 04, 2017

Copy link to clipboard

Copied

LATEST

Be careful I do not know if you can test if the laye's object  is a Photoshop object or not. You need to know if it will open in Photshop or not. Photoshop also does not support some file types the way they should be  for example EPS are not process as vector graphice.  The will open as a singel raster layer no vectors. Same with SVG files.   

JJMack

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines