(Сценарии) Photoshop удаляет специальные символы - PullRequest
0 голосов
/ 10 января 2019

У меня есть сценарий (с большим количеством украденных частей, которые вы можете распознать), который проходит через выбранную группу изображений, копирует изображение и имя файла и применяется к шаблону в Photoshop. Все работает просто отлично, за исключением того, что Photoshop каким-то образом удаляет умлаутс из моих строк, т. Е. Бьорн становится Бьорном.

«Ведение журнала» в предупреждении внутри Photoshop (строка № 30 ниже) показывает, что оно содержит правильную строку до тех пор, пока не будет применено в качестве textItem.contents.

Код указан ниже, спасибо за любую помощь!

#target photoshop
app.displayDialogs = DialogModes.NO;

var templateRef = app.activeDocument;
var templatePath = templateRef.path;
var photo = app.activeDocument.layers.getByName("Photo"); // keycard_template.psd is the active document


// Check if photo layer is SmartObject;
if (photo.kind != "LayerKind.SMARTOBJECT") {
    alert("selected layer is not a smart object")
} else {
    // Select Files;
    if ($.os.search(/windows/i) != -1) {
        var photos = File.openDialog("Select photos", "*.png;*.jpg", true)
    } else {
        var photos = File.openDialog("Select photos", getPhotos, true)
    };
    if (photos.length) replaceItems();
}

function replaceItems() {
    for (var m = 0; m < photos.length; m++) {
        if (photos.length > 0) {
            // Extract name
            var nameStr = photos[m].name;
            var nameNoExt = nameStr.split(".");
            var name = nameNoExt[0].replace(/\_/g, " ");
            
            // Replace photo and text in template
            photo = replacePhoto(photos[m], photo);
            // alert(name);
            replaceText(templateRef, 'Name', name);        

            templateRef.saveAs((new File(templatePath + "/keycards/" + name + ".jpg")), jpgOptions, true);
        }
    }
}

// OS X file picker
function getPhotos(thePhoto) {
    if (thePhoto.name.match(/\.(png|jpg)$/i) != null || thePhoto.constructor.name == "Folder") {
        return true
    };
};

// JPG output options;
var jpgOptions = new JPEGSaveOptions();  
jpgOptions.quality = 12; //enter number or create a variable to set quality  
jpgOptions.embedColorProfile = true;   
jpgOptions.formatOptions = FormatOptions.STANDARDBASELINE;


// Replace SmartObject Contents
function replacePhoto(newFile, theSO) {
    app.activeDocument.activeLayer = theSO;
    // =======================================================
    var idplacedLayerReplaceContents = stringIDToTypeID("placedLayerReplaceContents");
    var desc3 = new ActionDescriptor();
    var idnull = charIDToTypeID("null");
    desc3.putPath(idnull, new File(newFile));
    var idPgNm = charIDToTypeID("PgNm");
    desc3.putInteger(idPgNm, 1);
    executeAction(idplacedLayerReplaceContents, desc3, DialogModes.NO);
    return app.activeDocument.activeLayer
};


// Replace text strings
function replaceText(doc, layerName, newTextString) {
    for (var i = 0, max = doc.layers.length; i < max; i++) {
        var layerRef = doc.layers[i];
        if (layerRef.typename === "ArtLayer") {
        if (layerRef.name === layerName && layerRef.kind === LayerKind.TEXT) {
            layerRef.textItem.contents = decodeURI(newTextString);
        }
        } else {
            replaceText(layerRef, layerName, newTextString);
        }
    }
}
...