代码之家  ›  专栏  ›  技术社区  ›  gfx2000

Photoshop的Java脚本“在名称中带有自定义前缀的原始图像文件夹中另存为JPEG”

  •  1
  • gfx2000  · 技术社区  · 3 年前

    我有一个很棒的Java脚本,我早在2015年就在网上找到了。它就像一个符咒! 它将在Photoshop中打开的文件作为高质量JPEG保存在与原始文件相同的文件夹中:

    #target photoshop
    
    var saveFile = new File(activeDocument.path);
    
    // =======================================================
    
    var idsave = charIDToTypeID( "save" );
    
        var desc8 = new ActionDescriptor();
    
        var idAs = charIDToTypeID( "As  " );
    
            var desc9 = new ActionDescriptor();
    
            var idEQlt = charIDToTypeID( "EQlt" );
    
            desc9.putInteger( idEQlt, 12 );
    
            var idMttC = charIDToTypeID( "MttC" );
    
            var idMttC = charIDToTypeID( "MttC" );
    
            var idNone = charIDToTypeID( "None" );
    
            desc9.putEnumerated( idMttC, idMttC, idNone );
    
        var idJPEG = charIDToTypeID( "JPEG" );
    
        desc8.putObject( idAs, idJPEG, desc9 );
    
        var idIn = charIDToTypeID( "In  " );
    
        desc8.putPath( idIn, new File( saveFile ) );
    
        var idDocI = charIDToTypeID( "DocI" );
    
        desc8.putInteger( idDocI, 35 );
    
        var idCpy = charIDToTypeID( "Cpy " );
    
        desc8.putBoolean( idCpy, false );
    
        var idLwCs = charIDToTypeID( "LwCs" );
    
        desc8.putBoolean( idLwCs, true );
    
        var idsaveStage = stringIDToTypeID( "saveStage" );
    
        var idsaveStageType = stringIDToTypeID( "saveStageType" );
    
        var idsaveSucceeded = stringIDToTypeID( "saveSucceeded" );
    
        desc8.putEnumerated( idsaveStage, idsaveStageType, idsaveSucceeded );
    
    executeAction( idsave, desc8, DialogModes.NO );
    
    

    但是

    有没有一种方法可以修改该脚本,使其能够:

    1. 在文件开头添加前缀,比如“_”(即“_Image.jpg”)

    2. 在Photoshop中关闭原始打开的文件,而不保存或要求保存。我找到了这一行,但我不确定将其添加到现有脚本的位置:

    app.activeDocument.close(SaveOptions.no);
    

    这将使这个令人惊叹的脚本更加有用,并帮助我节省大量时间,自动保存我目前正在编辑的7500多张图像。

    谢谢

    2 回复  |  直到 3 年前
        1
  •  1
  •   gfx2000    3 年前

    Adobe支持论坛的Stephen_A_Marsh帮助我编写了这段代码。 不妨在这里分享:

    #target photoshop
    var prefix = "_";
    var docName = activeDocument.name.replace(/\.[^\.]+$/, '');
    var saveFile = new File(activeDocument.path);
    // =======================================================
    var idsave = charIDToTypeID( "save" );
        var desc8 = new ActionDescriptor();
        var idAs = charIDToTypeID( "As  " );
            var desc9 = new ActionDescriptor();
            var idEQlt = charIDToTypeID( "EQlt" );
            desc9.putInteger( idEQlt, 12 ); // Quality level 12-1
            var idMttC = charIDToTypeID( "MttC" );
            var idMttC = charIDToTypeID( "MttC" );
            var idNone = charIDToTypeID( "None" );
            desc9.putEnumerated( idMttC, idMttC, idNone );
        var idJPEG = charIDToTypeID( "JPEG" );
        desc8.putObject( idAs, idJPEG, desc9 );
        var idIn = charIDToTypeID( "In  " );
        desc8.putPath( idIn, new File( saveFile + "/" + prefix + docName ) );
        var idDocI = charIDToTypeID( "DocI" );
        desc8.putInteger( idDocI, 35 );
        var idCpy = charIDToTypeID( "Cpy " );
        desc8.putBoolean( idCpy, false );
        var idLwCs = charIDToTypeID( "LwCs" );
        desc8.putBoolean( idLwCs, true );
        var idsaveStage = stringIDToTypeID( "saveStage" );
        var idsaveStageType = stringIDToTypeID( "saveStageType" );
        var idsaveSucceeded = stringIDToTypeID( "saveSucceeded" );
        desc8.putEnumerated( idsaveStage, idsaveStageType, idsaveSucceeded );
    executeAction(idsave, desc8, DialogModes.NO);
    activeDocument.close(SaveOptions.DONOTSAVECHANGES);
    
        2
  •  1
  •   Ghoul Fool    3 年前

    你已经回答了自己的问题!然而,以下是保存jpeg的代码,它不是Action Manager代码,更容易阅读:

    #target photoshop
    var prefix = "_";
    var docName = activeDocument.name.replace(/\.[^\.]+$/, '');
    var saveFile = new File(activeDocument.path + "/" + prefix + docName);
    
    var qlty = 12; //set jpeg quality here
    var jpgFile = new File(saveFile);
    jpgSaveOptions = new JPEGSaveOptions();
    jpgSaveOptions.formatOptions = FormatOptions.OPTIMIZEDBASELINE;
    jpgSaveOptions.embedColorProfile = true;
    jpgSaveOptions.matte = MatteType.NONE;
    jpgSaveOptions.quality = qlty;
    
    activeDocument.saveAs(jpgFile, jpgSaveOptions, true, Extension.LOWERCASE);