155 lines
6.2 KiB
JavaScript
155 lines
6.2 KiB
JavaScript
// Script JSX pour Photoshop : Création de fonds perdus avec repères verrouillés
|
|
// Copyright © 2024 Sébastien VTL
|
|
// License : 2024
|
|
// Version : 3.0
|
|
// Date : 2024-02-20
|
|
// Description : Créer des fonds perdus avec repères verrouillés
|
|
|
|
#target photoshop
|
|
|
|
// Fonction principale
|
|
function createBleed() {
|
|
try {
|
|
// Vérifier si les unités du document sont en millimètres ou centimètres
|
|
if (app.preferences.rulerUnits !== Units.MM && app.preferences.rulerUnits !== Units.CM) {
|
|
throw new Error("La configuration du document doit être en millimètres ou centimètres. Veuillez changer les unités avant d'exécuter ce script.");
|
|
}
|
|
|
|
// Créer une fenêtre de dialogue pour la sélection des dimensions et des options
|
|
var settings = showSettingsDialog();
|
|
if (!settings) return; // Si annulé, sortir
|
|
|
|
// Obtenir la résolution du document actuel
|
|
if (app.documents.length === 0) {
|
|
throw new Error("Aucun document ouvert. Veuillez ouvrir un document pour exécuter ce script.");
|
|
}
|
|
|
|
var doc = app.activeDocument;
|
|
var dpi = doc.resolution; // Résolution du document en DPI (pixels par pouce)
|
|
var mmToPixels = function(mm) { return (mm / 25.4) * dpi; }; // Conversion mm -> pixels
|
|
var cmToPixels = function(cm) { return (cm * 10) / 25.4 * dpi; }; // Conversion cm -> pixels
|
|
|
|
// Calculer les dimensions en pixels en fonction des unités
|
|
var bleedPixels, safeZonePixels;
|
|
if (app.preferences.rulerUnits === Units.MM) {
|
|
bleedPixels = mmToPixels(settings.bleedSize);
|
|
safeZonePixels = mmToPixels(settings.safeZoneSize);
|
|
} else if (app.preferences.rulerUnits === Units.CM) {
|
|
bleedPixels = cmToPixels(settings.bleedSize / 10);
|
|
safeZonePixels = cmToPixels(settings.safeZoneSize / 10);
|
|
}
|
|
|
|
// Ajuster le plan de travail
|
|
resizeCanvasWithBleed(doc, bleedPixels);
|
|
|
|
// Ajouter et verrouiller les repères
|
|
addGuidesAndLock(doc, bleedPixels, safeZonePixels, doc.width, doc.height, settings.addCenterGuides);
|
|
|
|
alert("Plan de travail ajusté et repères verrouillés avec les dimensions suivantes :\n" +
|
|
"- Fond perdu : " + (settings.bleedSize * 10) + " mm\n" +
|
|
"- Zone de protection : " + (settings.safeZoneSize * 10) + " mm\n" +
|
|
(settings.addCenterGuides ? "- Repères centraux ajoutés\n" : "") +
|
|
"\nVersion 3.0" +
|
|
"\nScript Créé par Sébastien VTL.");
|
|
} catch (e) {
|
|
alert("Erreur : " + e.message);
|
|
}
|
|
}
|
|
|
|
// Fonction pour afficher le menu de sélection avec option pour les repères centraux
|
|
function showSettingsDialog() {
|
|
var dialog = new Window("dialog", "Paramètres de réglages");
|
|
dialog.orientation = "column";
|
|
|
|
// Section pour le fond perdu
|
|
var bleedGroup = dialog.add("group");
|
|
bleedGroup.add("statictext", undefined, "Fond perdu (en mm) :");
|
|
var bleedDropdown = bleedGroup.add("dropdownlist", undefined, ["3", "4", "5"]);
|
|
bleedDropdown.selection = 0;
|
|
|
|
// Section pour la zone de protection
|
|
var safeZoneGroup = dialog.add("group");
|
|
safeZoneGroup.add("statictext", undefined, "Zone de protection (en mm) :");
|
|
var safeZoneDropdown = safeZoneGroup.add("dropdownlist", undefined, ["3", "4", "5"]);
|
|
safeZoneDropdown.selection = 0;
|
|
|
|
// Option pour ajouter des repères centraux
|
|
var centerGuideGroup = dialog.add("group");
|
|
centerGuideGroup.add("checkbox", undefined, "Option repère centre document");
|
|
var centerGuideCheckbox = centerGuideGroup.children[0];
|
|
centerGuideCheckbox.value = false; // Désactivé par défaut
|
|
|
|
// Boutons OK et Annuler
|
|
var buttonGroup = dialog.add("group");
|
|
buttonGroup.alignment = "center";
|
|
var okButton = buttonGroup.add("button", undefined, "OK");
|
|
var cancelButton = buttonGroup.add("button", undefined, "Annuler");
|
|
|
|
cancelButton.onClick = function () { dialog.close(0); };
|
|
okButton.onClick = function () { dialog.close(1); };
|
|
|
|
if (dialog.show() !== 1) return null;
|
|
|
|
return {
|
|
bleedSize: parseFloat(bleedDropdown.selection.text) / 10, // Convertir 3, 4, 5 en 0.3, 0.4, 0.5
|
|
safeZoneSize: parseFloat(safeZoneDropdown.selection.text) / 10,
|
|
addCenterGuides: centerGuideCheckbox.value
|
|
};
|
|
}
|
|
|
|
// Fonction pour ajuster le plan de travail
|
|
function resizeCanvasWithBleed(doc, bleedPixels) {
|
|
var originalWidth = doc.width;
|
|
var originalHeight = doc.height;
|
|
doc.resizeCanvas(originalWidth + 2 * bleedPixels, originalHeight + 2 * bleedPixels, AnchorPosition.MIDDLECENTER);
|
|
}
|
|
|
|
// Fonction pour ajouter et verrouiller les repères
|
|
function addGuidesAndLock(doc, bleedPixels, safeZonePixels, width, height, addCenterGuides) {
|
|
// Ajouter les repères
|
|
var guides = [];
|
|
|
|
// Repères du fond perdu
|
|
guides.push(addGuide(doc, 0, "V"));
|
|
guides.push(addGuide(doc, width, "V"));
|
|
guides.push(addGuide(doc, 0, "H"));
|
|
guides.push(addGuide(doc, height, "H"));
|
|
|
|
// Repères des dimensions de base
|
|
guides.push(addGuide(doc, bleedPixels, "V"));
|
|
guides.push(addGuide(doc, width - bleedPixels, "V"));
|
|
guides.push(addGuide(doc, bleedPixels, "H"));
|
|
guides.push(addGuide(doc, height - bleedPixels, "H"));
|
|
|
|
// Repères de la zone de protection
|
|
guides.push(addGuide(doc, bleedPixels + safeZonePixels, "V"));
|
|
guides.push(addGuide(doc, width - bleedPixels - safeZonePixels, "V"));
|
|
guides.push(addGuide(doc, bleedPixels + safeZonePixels, "H"));
|
|
guides.push(addGuide(doc, height - bleedPixels - safeZonePixels, "H"));
|
|
|
|
|
|
// Ajouter les repères centraux si activé
|
|
|
|
// Verrouiller les repères en verrouillant le document
|
|
doc.guides.locked = true;
|
|
doc.suspendHistory("Verrouillage des repères", function() {
|
|
app.runMenuItem(stringIDToTypeID("lockGuides"));
|
|
});
|
|
|
|
if (addCenterGuides) {
|
|
guides.push(addGuide(doc, width / 2, "V"));
|
|
guides.push(addGuide(doc, height / 2, "H"));
|
|
}
|
|
|
|
// Verrouiller les repères
|
|
doc.guides.locked = true;
|
|
}
|
|
|
|
// Fonction pour ajouter un repère
|
|
function addGuide(doc, position, orientation) {
|
|
return doc.guides.add(orientation === "H" ? Direction.HORIZONTAL : Direction.VERTICAL, position);
|
|
}
|
|
|
|
// Exécuter la fonction principale
|
|
createBleed();
|