-
Filigrane incrementale
Bonjour.
Je souhaite avoir un script qui inscrive un numéro incrémentale en bas de ma photo et qui l'enregistre sous le numero + le nom d'origine.
En cherchant sur le net j'ai trouvé ceci :
Code:
// vous utilisez ce script à vos propres risques !
#target photoshop
// folder selection;
var theFolder = Folder.selectDialog ("select folder");
if (theFolder) {
var theFolderFiles = retrieveTIFandPSDandJPG (theFolder, []);
var originalRulerUnits = preferences.rulerUnits;
preferences.rulerUnits = Units.PERCENT;
// work through the files;
for (var m = 0; m < theFolderFiles.length; m++) {
var theNumber = bufferNumberWithZeros(m + 1, 3);
var myDocument = app.open(File(theFolderFiles[m]));
// getting the name and location;
var docName = myDocument.name;
var basename = docName.match(/(.*)\.[^\.]+$/)[1];
//getting the location;
var docPath = myDocument.path;
// create a text layer;
var textLayer = myDocument.artLayers.add();
textLayer.kind = LayerKind.TEXT;
textLayer.name = "text";
textLayer.blendMode = BlendMode.NORMAL;
textLayer.opacity = 100;
var myTextRef = textLayer.textItem;
myTextRef.size = 150;
myTextRef.font = "Arial";
var newColor = new SolidColor();
newColor.rgb.red = 255;
newColor.rgb.green = 255;
newColor.rgb.blue = 255;
myTextRef.color = newColor;
myTextRef.position = new Array( 1, 99);
myTextRef.contents = theNumber;
// jpg options;
var jpegOptions = new JPEGSaveOptions();
jpegOptions.quality = 12;
jpegOptions.embedColorProfile = true;
//save jpg;
myDocument.saveAs((new File(docPath+"/"+theNumber+"_"+basename+".jpg")),jpegOptions,true);
myDocument.close(SaveOptions.DONOTSAVECHANGES)
};
preferences.rulerUnits = originalRulerUnits;
};
////// get tif-, psd-, jpg-files from folder and subfolders //////
function retrieveTIFandPSDandJPG (theFolder, theFiles) {
if (!theFiles) {var theFiles = []};
var theContent = theFolder.getFiles();
for (var n = 0; n < theContent.length; n++) {
var theObject = theContent[n];
if (theObject.constructor.name == "Folder") {
theFiles = retrieveTIFandPSDandJPG(theObject, theFiles)
};
if (theObject.name.slice(-4) == ".tif" || theObject.name.slice(-4) == ".psd" || theObject.name.slice(-4) == ".jpg") {
theFiles = theFiles.concat(theObject)
}
};
return theFiles
};
////// buffer number with zeros //////
function bufferNumberWithZeros (number, places) {
var theNumberString = String(number);
for (var o = 0; o < (places - String(number).length); o++) {
theNumberString = String("0" + theNumberString)
};
return theNumberString
};
Cela fonctionne assez bien mais je souhaiterai choisir le numéro de départ de la numérotation.
Avez vous une idée ?
Merci pour votre aide
-
-
Bonjour,
La variable gérant le numéro c'est "theNumber" sa valeur dépend de "m" qui est initialisé dans la boucle for à 0
Bonne continuation
-
Bonjour Antec
Oui c'est ceci mais je veux rester sur un script ( gratuit )
je voulais éviter de passé par une appli supplementaire.
Bonjour YVnod77
j'avais compris que la valeur thenumber contrôlais le numero mais je ne veux pas a avoir a modifier le code pour chaque utilisation.
Je pensais qu'il était possible d'avoir une boite de dialogue qui demande le numero de depart.
J'ai fais des essais mais le contenu de ma boite de dialogue est considéré comme du texte
exemple si je rentre 100
l’incrémentation se fait 100 1 - 100 2 - 100 3 - 100 4
voici mon essai :
Code:
// vous utilisez ce script à vos propres risques !
#target photoshop
// folder selection;
var theFolder = Folder.selectDialog ("select folder");
if (theFolder) {
var theFolderFiles = retrieveTIFandPSDandJPG (theFolder, []);
var originalRulerUnits = preferences.rulerUnits;
preferences.rulerUnits = Units.PERCENT;
var reponse = prompt("Numero de la première photo ?", "<Entrez ici votre numero>");
if( reponse == null ){
alert("Vous avez cliqué sur Annuler");
} else
var r = reponse;
}
// work through the files;
for (var m = 0; m < theFolderFiles.length; m++) {
var theNumber = bufferNumberWithZeros(r+ m, 3);
var myDocument = app.open(File(theFolderFiles[m]));
// getting the name and location;
var docName = myDocument.name;
var basename = docName.match(/(.*)\.[^\.]+$/)[1];
//getting the location;
var docPath = myDocument.path;
// create a text layer;
var textLayer = myDocument.artLayers.add();
textLayer.kind = LayerKind.TEXT;
textLayer.name = "text";
textLayer.blendMode = BlendMode.NORMAL;
textLayer.opacity = 100;
var myTextRef = textLayer.textItem;
myTextRef.size = 150;
myTextRef.font = "Arial";
var newColor = new SolidColor();
newColor.rgb.red = 255;
newColor.rgb.green = 255;
newColor.rgb.blue = 255;
myTextRef.color = newColor;
myTextRef.position = new Array( 1, 99);
myTextRef.contents = theNumber;
// jpg options;
var jpegOptions = new JPEGSaveOptions();
jpegOptions.quality = 12;
jpegOptions.embedColorProfile = true;
//save jpg;
myDocument.saveAs((new File(docPath+"/"+theNumber+"_"+basename+".jpg")),jpegOptions,true);
myDocument.close(SaveOptions.DONOTSAVECHANGES)
};
preferences.rulerUnits = originalRulerUnits;
;
////// get tif-, psd-, jpg-files from folder and subfolders //////
function retrieveTIFandPSDandJPG (theFolder, theFiles) {
if (!theFiles) {var theFiles = []};
var theContent = theFolder.getFiles();
for (var n = 0; n < theContent.length; n++) {
var theObject = theContent[n];
if (theObject.constructor.name == "Folder") {
theFiles = retrieveTIFandPSDandJPG(theObject, theFiles)
};
if (theObject.name.slice(-4) == ".tif" || theObject.name.slice(-4) == ".psd" || theObject.name.slice(-4) == ".jpg") {
theFiles = theFiles.concat(theObject)
}
};
return theFiles
};
////// buffer number with zeros //////
function bufferNumberWithZeros (number, places) {
var theNumberString = String(number);
for (var o = 0; o < (places - String(number).length); o++) {
theNumberString = String("0" + theNumberString)
};
return theNumberString
};
Merci pour votre aide
-
Je pense que c'est un problème de typage de variable (ou de transtypage, conversion de type)
r et reponse doivent être de type chaine de caractères, m est de type entier, la fonction bufferNumberWithZeros attend un entier "number" et un entier "places"
Je te propose plusieurs tests :
- Retires l'espace devant le m dans l'appel "var theNumber = bufferNumberWithZeros(r+m, 3);"
- Utilises une variable dans l'appel de fonction "var toto = m+r ;" l'appel devient "var theNumber = bufferNumberWithZeros(toto, 3);"
- essaies quelque chose du genre "var r = 0+reponse;" a la place de "var r = reponse;"
- recherches une fonction qui convertisse les chaines de caractères en entier (en gros l'inverse de la fonction string utilisé dans la fonction bufferNumberWithZeros, peut être Int ou Integer ?
-
Merci pour tes conseils.
c 'est effectivement un problème de type de variable
J'ai trouvé j'ai rajouté un : parseInt et cela fonctionne.
Le script fonctionne mais quelquefois il ne s 'exécute pas complètement.
Photoshop se lance
la fenêtre dossier aussi
la boite de dialogue pour le chiffre de départ aussi
et puis au moment du traitement des photos plus rien.
Le problème peut il venir du poids ou de la résolution des photos cela arrive qu'une fois de temps en temps