Erre a Photoshopban több megoldás is van, de ha teljesen automatikusan szeretnéd egy könyvtár összes képére rátenni a logót, akkor egy JavaScript (ExtendScript) a legjobb.
Az alábbi szkript:
- bekéri (vagy fixen beállítja) a forrásmappát, ahol a képek vannak
- bekéri a logo.jpg elérési útját
- végigmegy a mappa minden képfájlján
- minden képre ráhelyezi a logót a jobb alsó sarokba, kis margóval
- elmenti (felülírja vagy másik mappába menti, ahogy szeretnéd) JPG-ként
javascript
// ============================================
// Logo elhelyezése egy mappa összes képén
// Photoshop ExtendScript (.jsx)
// ============================================
#target photoshop
function main() {
// --- Beállítások ---
var sourceFolder = Folder.selectDialog("Válaszd ki a képeket tartalmazó mappát");
if (sourceFolder == null) return;
var logoFile = File.openDialog("Válaszd ki a logo.jpg fájlt", "*.jpg");
if (logoFile == null) return;
var outputFolder = new Folder(sourceFolder + "/logozott");
if (!outputFolder.exists) outputFolder.create();
var margin = 20; // margó pixelben a sarok és a logo között
var logoScalePercent = 15; // a logo mérete a kép szélességének %-ában
// Csak támogatott képformátumok
var files = sourceFolder.getFiles(/\.(jpg|jpeg|png|tif|tiff)$/i);
if (files.length == 0) {
alert("Nem található képfájl a kiválasztott mappában.");
return;
}
// Alapértelmezett mértékegység pixelre állítása (fontos!)
var originalRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
for (var i = 0; i < files.length; i++) {
var file = files[i];
if (file instanceof File) {
processImage(file, logoFile, outputFolder, margin, logoScalePercent);
}
}
app.preferences.rulerUnits = originalRulerUnits;
alert("Kész! " + files.length + " kép feldolgozva.\nEredmény: " + outputFolder.fsName);
}
function processImage(imageFile, logoFile, outputFolder, margin, logoScalePercent) {
var doc = app.open(imageFile);
// Logo behelyezése (Place)
var logoLayer = null;
try {
var desc = new ActionDescriptor();
desc.putPath(charIDToTypeID("null"), logoFile);
desc.putEnumerated(
charIDToTypeID("FTcs"),
charIDToTypeID("QCSt"),
charIDToTypeID("Qcsa")
);
executeAction(charIDToTypeID("Plc "), desc, DialogModes.NO);
logoLayer = doc.activeLayer;
} catch (e) {
alert("Hiba a logo beillesztésekor: " + e.message);
doc.close(SaveOptions.DONOTSAVECHANGES);
return;
}
// Logo méretezése a kép szélességének arányában
var targetWidth = doc.width.as("px") * (logoScalePercent / 100);
var currentWidth = logoLayer.bounds[2].as("px") - logoLayer.bounds[0].as("px");
var scaleFactor = (targetWidth / currentWidth) * 100;
logoLayer.resize(scaleFactor, scaleFactor, AnchorPosition.MIDDLECENTER);
// Logo pozicionálása jobb alsó sarokba
var logoWidth = logoLayer.bounds[2].as("px") - logoLayer.bounds[0].as("px");
var logoHeight = logoLayer.bounds[3].as("px") - logoLayer.bounds[1].as("px");
var targetX = doc.width.as("px") - logoWidth - margin;
var targetY = doc.height.as("px") - logoHeight - margin;
var currentX = logoLayer.bounds[0].as("px");
var currentY = logoLayer.bounds[1].as("px");
logoLayer.translate(targetX - currentX, targetY - currentY);
// Kép laposítása (flatten), majd mentés
doc.flatten();
var saveFile = new File(outputFolder + "/" + imageFile.name.replace(/\.[^\.]+$/, "") + ".jpg");
var jpgOptions = new JPEGSaveOptions();
jpgOptions.quality = 10; // 0-12 skálán
doc.saveAs(saveFile, jpgOptions, true, Extension.LOWERCASE);
doc.close(SaveOptions.DONOTSAVECHANGES);
}
main();Hogyan használd:
- Mentsd el a fenti kódot pl.
logo_batch.jsxnéven. - Photoshopban: Fájl → Szkriptek → Tallózás... (File → Scripts → Browse), és válaszd ki a fájlt.
- A szkript először bekéri a forrásmappát, majd a
logo.jpgfájlt. - Az eredmény egy
logozottalmappába kerül, hogy az eredeti képek épek maradjanak.
Testreszabási lehetőségek
margin– ha nagyobb/kisebb távolságot szeretnél a szélektől.logoScalePercent– ha a logo mérete a kép szélességéhez képest nagyobb/kisebb legyen.- Ha nem akarod, hogy a logo mérete a kép méretétől függjön, hanem fix pixelméretű legyen, azt is könnyen átírhatjuk.
- Ha inkább PNG-t szeretnél kimenetként (átlátszó logóval, pl.
logo.pngalpha csatornával), az is megoldható – ekkor aflatten()-t és a JPEG mentést kell módosítani.
Megjegyzések
Megjegyzés küldése