Photoshop-Cafe.de :: Dein Photoshop-Forum

Photoshop-Cafe.de :: Dein Photoshop-Forum (https://www.photoshop-cafe.de/forum/index.php)
-   Hilfestellung, Tipps und Tricks (https://www.photoshop-cafe.de/forum/forumdisplay.php?f=30)
-   -   Photoshop Bildgröße -X cm von der Ausgangsgröße per Aktion (https://www.photoshop-cafe.de/forum/showthread.php?t=25379)

ph_o_e_n_ix 25.05.19 21:56

Zitat:

Zitat von beetle04021969 (Beitrag 381929)
Ich habe eine Eingabemaske eingebaut und wenn jetzt ein Wert mit Komma eingegeben wird, das kann dieser nicht im Script berechnet werden, da ja ein Punkt zwischen den Zahlen erwartet wird. Gibt es eine Lösung für das Problem?

Ohne das Script zu kennen kann man natürlich auch nur mit etwas exemplarischem aufwarten...

Code:

var number = prompt("Insert numbers: ","10,5,5");

number = number.replace(/,/g, '.');
alert(number);

Zitat:

Vielleicht hast Du noch einen Tipp, wie ich am Besten Text in einen 1cm Rand einfüge, der sich immer dem vorhanden Platz anpasst? 40cm x 41cm = 40cm x 1cm Textfeld oder 60cm x 61cm = 60cm x 1cm Textfeld usw. aber unterschiedlich lange Namen, die dann in dieses Textfeld müssen.
Ich würde vielleicht einen Punkttext erzeugen und den Text mittels einer Auswahl sowohl Horizontal, als auch vertikal ausrichten...

Ob das sinnvoll ist oder nicht, kann ich allerdings nicht sagen.

beetle04021969 26.05.19 02:30

[QUOTE=ph_o_e_n_ix;381931]Ohne das Script zu kennen kann man natürlich auch nur mit etwas exemplarischem aufwarten...

Ich würde hier in das Eingabefeld gerne noch Kommazahlen eingeben können und in den oberen weißen Rand, einen Text per Eingabe platzieren, der allerdings unterschiedlich lang sein kann und der Rand ja auch unterschiedlich breit, je nach Bildgröße. Wenn dann der eingegebene Text noch der Bildname sein könnte, wäre es für den Moment perfekt.
Ich bin Dir für jede kleine Hilfe / Tipp dankbar. Stück für Stück verstehe ich immer mehr aber es wird mit Sicherheit noch eine Zeit brauchen, bis ich da wirklich durchsteige ;-)


#target photoshop
var originalRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.CM;
var dlg;
var labelGroup;
var inputGroup;
var widthInput;
var heightInput;
var randInput;
var buttonGroup;
var okButton;
var cancelButton;
dlg = new Window("dialog", "Form");
dlg.orientation = "row";
labelGroup = dlg.add("group");
labelGroup.orientation = "column";
labelGroup.add("statictext", undefined, "Breite cm:");
labelGroup.add("statictext", undefined, "Höhe cm:");
labelGroup.add("statictext", undefined, "Rand cm:");
inputGroup = dlg.add("group");
inputGroup.orientation = "column";
widthInput = inputGroup.add("edittext", undefined, "");
widthInput.characters = 10;
widthInput.active = true;
heightInput = inputGroup.add("edittext", undefined, "");
heightInput.characters = 10;
randInput = inputGroup.add("edittext", undefined, "");
randInput.characters = 10;
buttonGroup = dlg.add("group");
buttonGroup.orientation = "column";
okButton = buttonGroup.add("button", undefined, "OK");
cancelButton = buttonGroup.add("button", undefined, "Abbruch");
okButton.onClick = function() {

var doc;
var docWidth;
var docHeight;
var imageWidth;
var imageHeight;
var rand;
var black = new SolidColor();
black.rgb.hexValue = "000000";
app.backgroundColor = black;
var white = new SolidColor();
white.rgb.hexValue = "FFFFFF";

doc = app.activeDocument;


imageWidth = new UnitValue(widthInput.text, "cm");
imageHeight = new UnitValue(heightInput.text, "cm");
rand = new UnitValue(randInput.text, "cm");



doc.resizeImage (imageWidth-(rand*2), imageHeight-(rand*2));
doc.resizeCanvas(doc.width + 5 + rand*2, doc.height + 5 + rand*2, AnchorPosition.MIDDLECENTER)
app.backgroundColor = white;
doc.resizeCanvas(doc.width, doc.height + 1, AnchorPosition.BOTTOMCENTER)
dlg.hide();
};
dlg.show();
var originalRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.MM;

ph_o_e_n_ix 26.05.19 12:59

Was du da mit deinem Rand veranstaltest, leutet mir zwar nicht ganz ein (jedenfalls dann nicht, wenn man die ursprünglichen Vorgaben zu Grunde legt), aber da wirst du schon wissen, was du tust...

Hier mal nur auf die Schnelle eine halbgare Lösung...

Code:

#target photoshop

var originalRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.CM;

var dlg;
var labelGroup;
var inputGroup;
var widthInput;
var heightInput;
var randInput;
var buttonGroup;
var okButton;
var cancelButton;

dlg = new Window("dialog", "Form");
dlg.orientation = "row";
labelGroup = dlg.add("group");
labelGroup.orientation = "column";
labelGroup.add("statictext", undefined, "Breite cm:");
labelGroup.add("statictext", undefined, "Höhe cm:");
labelGroup.add("statictext", undefined, "Rand cm:");
inputGroup = dlg.add("group");
inputGroup.orientation = "column";
widthInput = inputGroup.add("edittext", undefined, "");
widthInput.characters = 10;
widthInput.active = true;
heightInput = inputGroup.add("edittext", undefined, "");
heightInput.characters = 10;
randInput = inputGroup.add("edittext", undefined, "");
randInput.characters = 10;
buttonGroup = dlg.add("group");
buttonGroup.orientation = "column";
okButton = buttonGroup.add("button", undefined, "OK");
cancelButton = buttonGroup.add("button", undefined, "Abbruch");
okButton.onClick = function() {
 
        var doc;
        var docWidth;
        var docHeight;
        var imageWidth;
        var imageHeight;
        var rand;
        var black = new SolidColor();
        black.rgb.hexValue = "000000";
        app.backgroundColor = black;
        var white = new SolidColor();
        white.rgb.hexValue = "FFFFFF";
 
        doc = app.activeDocument;
 
        imageWidth = widthInput.text.replace(/,/g, '.');
        imageWidth = new UnitValue(imageWidth, "cm");
        imageHeight = heightInput.text.replace(/,/g, '.');
        imageHeight = new UnitValue(imageHeight, "cm");
        rand = randInput.text.replace(/,/g, '.');
        rand = new UnitValue(rand, "cm");
 
        doc.resizeImage(imageWidth - (rand * 2), imageHeight - (rand * 2));
        doc.resizeCanvas(doc.width + 5 + rand * 2, doc.height + 5 + rand * 2, AnchorPosition.MIDDLECENTER)
        app.backgroundColor = white;
        doc.resizeCanvas(doc.width, doc.height + 1, AnchorPosition.BOTTOMCENTER)
   
        var artLayer = doc.artLayers.add();
        artLayer.kind = LayerKind.TEXT;
        var textItem = artLayer.textItem;
        textItem.contents = activeDocument.name;
        textItem.size = 13;
        textItem.font = "ArialMT";
        textItem.justification = Justification.CENTER;
        var textPosition = [doc.width / 2, .65];
        textItem.position = textPosition;
 
        dlg.hide();
};

dlg.show();

var originalRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.MM;

ps: Und zukünftig bitte die Code-Tags hier im Forum verwenden ... das macht es übersichtlicher...

heikehk 26.05.19 16:51

Zitat:

Zitat von ph_o_e_n_ix (Beitrag 381840)
Wäre mir jetzt nicht bekannt.

Schade ...

beetle04021969 26.05.19 20:58

Zitat:

Zitat von ph_o_e_n_ix (Beitrag 381933)
Was du da mit deinem Rand veranstaltest, leutet mir zwar nicht ganz ein (jedenfalls dann nicht, wenn man die ursprünglichen Vorgaben zu Grunde legt), aber da wirst du schon wissen, was du tust...

Hier mal nur auf die Schnelle eine halbgare Lösung...

Hammer!!! Danke!!!

Wie würde den eine gare Lösung aussehen, wenn die halbbare schon so super klasse funktioniert?:clap::ok:
Es macht genau das, was es soll und ich bin begeistert und kann wieder etwas daraus lernen. Jetzt muss ich mal analysieren, wie Du das gemacht hast und was die einzelnen Parameter bewirken und genau tun.
Das mit der Codeeingabe merke ich mir für das nächste mal.

Einen schönen Sonntag noch und nochmals DANKE.

ph_o_e_n_ix 27.05.19 08:24

Naja, die Y-Position des Textes ist ja nicht, wie ursprünglich angedacht, mittels Auswahl und horizontalem Ausrichten umgesetzt worden (was auch nicht optimal ist), sondern durch eine eher statische Angabe. Bei Verwendung eines anderen Fonts (hier müssen im übrigen die Postscriptnamen verwendet werden), stimmt die Position u.U. natürlich nicht mehr. Ähnliches gilt für die Schriftgröße. Sollte diese optisch bei jeder verwendeten Schrift ähnlich groß sein (z.B. 75% der Höhe des weissen Feldes entsprechen), müsste dieses natürlich berechnet werden.

Verbessern könnte man noch genug. Eine Abfrage ob überhaupt ein Dokument geöffnet ist, wäre sinnvoll oder ein Hinweis bei mehrfach verwendeten Kommawerten oder generell bei Verwendung von Buchstaben (es sei den, du erweiterst den Funktionsumfang um Eingabewerte, wie mm, pixel, inch, etc.).

Zudem funktioniert dein Abbruch-Button derzeit nicht (änderst du die Bezeichung wieder in "Cancel" hingegen schon) - somit lässt sich dein Dialogfenster nur duch die ESC-Taste beenden ;)

Am Ende deines Scriptes setzt du die Lineal-Einheit auf MM und nicht auf den orignalen Wert zurück...daher:

Code:

var originalRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.MM;

ändern in...

Code:

preferences.rulerUnits = originalRulerUnits;
Soweit dazu und um nur mal die gröbsten "Schnitzer" anzusprechen... ;)

beetle04021969 31.05.19 13:05

Ich bin schon wieder ein paar Schritte weiter aber jetzt beiße ich mir an dem Thema ein Logo einfügen und auf 1cm in der Höhe verkleinern aus. Kannst Du mir vielleicht nochmal helfen?
Das Logo bekomme ich schon in mein Dokument aber wie bekomme ich es jetzt auf 1cm in der Höhe skaliert und behalte die Proportionen bei, zumal es für ein Dokument das immer die gleiche Größe hat, ja noch gehen würde aber 1cm ist ja je nach Auflösung (dpi) unterschiedlich? :fragen:

Noch ein klitzekleine Frage und zwar, was muss ich ändern wenn ich nicht möchte das mein Bild beim resize die Auflösung (dpi) beibehält, sondern diese sich bei einer Vergrößerung verringert aber maximal auf 120dpi. Anders gesagt bis zu einer Auflösung von 120 dpi soll das Bild nicht neu berechnet werden, sondern nur die Auflösung angepasst werden bis die Maße stimmen, umso unnötige Qualitätsverluste zu umgehen. :frieden:

Code:

#target photoshop

var originalRulerUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.CM;

main ();
function main () {
if (app.documents.length < 1) {
alert ("No document open to resize.");
return;
}

var dlg;
var labelGroup;
var inputGroup;
var widthInput;
var heightInput;
var randInput;
var buttonGroup;
var okButton;
var cancelButton;

dlg = new Window("dialog", "Bildgröße und Rand?");
dlg.orientation = "row";
labelGroup = dlg.add("group");
labelGroup.orientation = "column";
labelGroup.add("statictext", undefined, "Breite cm:");
labelGroup.add("statictext", undefined, "Höhe cm:");
labelGroup.add("statictext", undefined, "Rand cm:");
inputGroup = dlg.add("group");
inputGroup.orientation = "column";
widthInput = inputGroup.add("edittext", undefined, "");
widthInput.characters = 10;
widthInput.active = true;
heightInput = inputGroup.add("edittext", undefined, "");
heightInput.characters = 10;
randInput = inputGroup.add("edittext", undefined, "");
randInput.characters = 10;
buttonGroup = dlg.add("group");
buttonGroup.orientation = "column";
okButton = buttonGroup.add("button", undefined, "OK");
cancelButton = buttonGroup.add("button", undefined, "Cancel");
okButton.onClick = function() {
 
        var doc;
        var docWidth;
        var docHeight;
        var imageWidth;
        var imageHeight;
        var rand;
        var black = new SolidColor();
        black.rgb.hexValue = "000000";
        app.backgroundColor = black;
        var white = new SolidColor();
        white.rgb.hexValue = "FFFFFF";
 
        doc = app.activeDocument;
   
    doc.flatten()
 
        imageWidth = widthInput.text.replace(/,/g, '.');
        imageWidth = new UnitValue(imageWidth, "cm");
        imageHeight = heightInput.text.replace(/,/g, '.');
        imageHeight = new UnitValue(imageHeight, "cm");
        rand = randInput.text.replace(/,/g, '.');
        rand = new UnitValue(rand, "cm");
 
        doc.resizeImage(imageWidth - (rand * 2), imageHeight - (rand * 2));
    app.backgroundColor = black;
        doc.resizeCanvas(doc.width + 5 + (rand * 2), doc.height + 5 + (rand * 2), AnchorPosition.MIDDLECENTER)
        app.backgroundColor = white;
        doc.resizeCanvas(doc.width, doc.height + 1, AnchorPosition.BOTTOMCENTER)
   
// Dokumentname zu Bildüberschrift

var docName = activeDocument.name;;
var neuerName1 = docName.replace("_", " ");
var neuerName2 = neuerName1.replace("_", " ");
var neuerName3 = neuerName2.replace("fertig-merged", "");
var neuerName4 = neuerName3.replace("fertig", "");
var neuerName5 = neuerName4.replace("finish", "");
var neuerName = neuerName5.replace(".psd", ""); 

main2();
function main2(){
if(!documents.length) return;
var w = new Window ("dialog","Bildbeschriftung");
w.orientation = 'row';
w.alignment='top';
w.pnl = w.add('panel', undefined, undefined, {borderStyle:'black'});
w.g15 = w.pnl.add('group');
w.g15.alignment='left';
w.g15.st1 = w.g15.add('statictext',undefined,'Text');
w.g15.et1 = w.g15.add('edittext',undefined,widthInput.text+" x " + imageHeight + " " +neuerName+" Druck: www.feineart.de");
w.g15.et1.preferredSize=[600,20];
w.g20 = w.pnl.add('group');
w.g20.bu1 = w.g20.add('button',undefined,'Create Text');
w.g20.bu1.preferredSize=[140,25];
w.g20.bu2 = w.g20.add('button',undefined,'Cancel');
w.g20.bu2.preferredSize=[140,25];
w.g20.bu1.onClick=function(){
if(w.g15.et1.text == ''){
    alert('No text has been entered!');
    return;
    }
w.close(0);
var startRulerUnits = preferences.rulerUnits;
app.preferences.rulerUnits = Units.CM;
doc = app.activeDocument;

var artLayer = doc.artLayers.add();
        artLayer.kind = LayerKind.TEXT;
        var textItem = artLayer.textItem;
        textItem.contents = w.g15.et1.text;
        textItem.size = 13;
        textItem.font = "ArialMT";
        textItem.justification = Justification.CENTER;
        var textPosition = [doc.width / 2, .65];
    textItem.position = textPosition;
    artLayer.rotate(180, AnchorPosition.MIDDLECENTER); 

preferences.rulerUnits = startRulerUnits;
}
w.show();
}
 
        dlg.hide();
};

dlg.show();
}
//========================================================
app.preferences.rulerUnits = originalRulerUnits;

Das habe ich gefunden um das Logo einzufügen aber ich schaffe es nicht auf meine Bedürfnisse anzupassen. :nixweiss:
Code:

/* ==========================================================
// 2017  John J. McAssey (JJMack) 
// ======================================================= */ 
// This script is supplied as is. It is provided as freeware. 
// The author accepts no liability for any problems arising from its use. 
/*
<javascriptresource>
<about>$$$/JavaScripts/PlaceWatermark/About=JJMack's PlaceWatermark ^r^rCopyright 2017 Mouseprints.net^r^rPhotoshop Script^rCustomize using first four var</about>
<category>JJMack's Script</category>
</javascriptresource>
*/ 
 
 
#target photoshop;   
app.bringToFront();   
var logoFile = "~/Desktop/JJMack.png"; // Watermark file should be large for resize down works better than up 
var LogoSize = 10; // percent of document height to resize Watermark to 
var LogoMargin = 1;                                        // percent of Document height the Watermark should have as a margin 
var BottomLetf = false; // false = Bottom Right true Bottom Left 
 
 
placeWatermark(logoFile, LogoSize, LogoMargin);            // Place Watermark into the bottom of the document 
 
 
function placeWatermark(Image,Size,Margin){   
if(!documents.length) return;  // if no document return 
try{   
var doc = app.activeDocument; // set Doc object to active document 
app.displayDialogs = DialogModes.NO; // Dialog off 
var strtRulerUnits = app.preferences.rulerUnits; // Save Users ruler units 
var strtTypeUnits = app.preferences.typeUnits; // Save Users Type units 
app.preferences.rulerUnits = Units.PIXELS; // work with pixels 
app.preferences.typeUnits = TypeUnits.PIXELS; // work with pixels 
var fileObj = new File(Image);                // the passed file 
if(!fileObj.exists){  // If file does not exits tell user 
alert(fileObj.name  + " does not exist!");   
return;   
}   
var layers = app.activeDocument.layers; // get layers 
app.activeDocument.activeLayer = layers[0] // Target Top Layer 
placeFile(fileObj); // Place in file the Watermark png file 
activeDocument.activeLayer.resize(100 ,100,AnchorPosition.MIDDLECENTER); // Insure Place did not scale layer   
var SB = activeDocument.activeLayer.bounds; // get layers bounds 
var layerHeight = SB[3] - SB[1]; // get layers height   
var resizePercent = (100/layerHeight)*(Size/100*doc.height.value); // Percent to resize by 
activeDocument.activeLayer.resize(resizePercent ,resizePercent,AnchorPosition.MIDDLECENTER);  // Resize width and height by percentage 
SB = activeDocument.activeLayer.bounds; // get resized layers bounds   
activeDocument.activeLayer.translate(-SB[0].value,-SB[1].value); // Move resized layer to top left canvas corner 
var LayerWidth = (SB[2].value - SB[0].value); // get resized layers width   
var LayerHeight = (SB[3].value - SB[1].value);  // get resized layers height 
marginSize = Margin/100*doc.height.value; // Margin size 
// move resized watermark into the document lower right corner with some margin or lower left 
if  ( BottomLetf) {activeDocument.activeLayer.translate(marginSize,( doc.height.value -marginSize - LayerHeight));} 
else {activeDocument.activeLayer.translate((doc.width.value -marginSize - LayerWidth),( doc.height.value -marginSize - LayerHeight));} 

catch(e) { alert(e + ': on line ' + e.line); } // inform user of error   
finally{   
app.preferences.rulerUnits = strtRulerUnits; // Restore user ruler units   
app.preferences.typeUnits = strtTypeUnits; // Restore user type units     
};   
}; 
 
function placeFile(placeFile) {   
    var desc21 = new ActionDescriptor();   
    desc21.putPath( charIDToTypeID('null'), new File(placeFile) );   
    desc21.putEnumerated( charIDToTypeID('FTcs'), charIDToTypeID('QCSt'), charIDToTypeID('Qcsa') );   
    var desc22 = new ActionDescriptor();   
    desc22.putUnitDouble( charIDToTypeID('Hrzn'), charIDToTypeID('#Pxl'), 0.000000 );   
    desc22.putUnitDouble( charIDToTypeID('Vrtc'), charIDToTypeID('#Pxl'), 0.000000 );   
    desc21.putObject( charIDToTypeID('Ofst'), charIDToTypeID('Ofst'), desc22 );   
    executeAction( charIDToTypeID('Plc '), desc21, DialogModes.NO );   
};


beetle04021969 31.05.19 15:41

Zitat:

Zitat von beetle04021969 (Beitrag 381972)

Noch ein klitzekleine Frage und zwar, was muss ich ändern wenn ich nicht möchte das mein Bild beim resize die Auflösung (dpi) beibehält, sondern diese sich bei einer Vergrößerung verringert aber maximal auf 120dpi. Anders gesagt bis zu einer Auflösung von 120 dpi soll das Bild nicht neu berechnet werden, sondern nur die Auflösung angepasst werden bis die Maße stimmen, umso unnötige Qualitätsverluste zu umgehen. :frieden:

Dieses Problem konnte ich jetzt doch selber lösen, bleibt nur noch das mit dem Logo :-)

ph_o_e_n_ix 31.05.19 15:47

Ich hab zwar gerade keine Zeit und daher dein Script nur mal schnell überflogen, aber ein paar dinge sind mir auf die Schnelle schon mal aufgefallen...

Wo ist in deinem Script der Part, bei dem du das Logo erfolgreich einfügst ("Das Logo bekomme ich schon in mein Dokument")?

Zudem verwendest du beim Text einmal bei der Größe die falsche Variable (je nachdem ob du die Werte nun mit einem Komma oder einem Punkt angeben möchtest.

Ausserdem kannst du nach wie vor sowohl die Breite, als auch die Höhe angeben - bei quadratischen Bildern überflüssig und im Falle der Möglichkeit auch rechteckige Bilder bedienen zu können, der falsche Ansatz, weil nicht Proportional beschnitten wird, sondern skaliert (was natürlich für verzerrte Bilder führt).

Aber zu deinem Problem...

Nicht umsonst habe ich in meinem Script, die Auflösung berücksichtigt. ;)

Simple Abfrage mit: alert(activeDocument.resolution);

oder in deinem Fall alert(doc.resolution);

Da du das ganze ja auflösungsabhängig machen möchtest, sollte eine simple If / Else Abfrage die passende Lösung sein.

Zum Umrechnen diverser Größen in Bezug auf die Auflösung sollte sich im WWW genug finden lassen ;)

ph_o_e_n_ix 30.06.19 11:53

Schade ... wieder einmal bleibt ein User die Lösung/Antworten auf Fragen schuldig.

Insofern keine wirklich dumme Entscheidung meinerseits, nicht einfach nur ein fertiges Script zu posten, sondern nur Lösungsansätze.


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:02 Uhr.

Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
©2005-2024 photoshop-cafe.de

Seite wurde generiert in 0,02485 Sekunden mit 8 Queries