Gibt es eine Möglichkeit, die Breite des Textes in einem Absatzfeld zu erhalten? Die Messung würde die Verpackung nicht berücksichtigen. Das heißt, es wäre gleich der Summe jeder umbrochenen Zeile.
Ich frage nicht nach der Breite der Box.
Angenommen, ich habe einen Absatztext, der die Zeichenfolge „!!!!!“ enthält. In Arial bei 12pt sind das 23 px. Aber wenn der Inhalt "mmmmm" wäre, wäre die Breite 54px. Die Messung müsste also die Breite der spezifischen Zeichen in der Zeichenfolge berücksichtigen.
Ich kann das mit dem Linealwerkzeug messen, aber gibt es eine Möglichkeit, eine solche Messung in einem Skript zu erhalten?
Kurz gesagt, nicht ohne das Dokument auf eine Weise zu verändern, die nicht sehr nützlich ist. Es folgt ein kleines Brainstorming (in Javascript) ...
Textabmessungen können nur angegeben werden, wenn der Text auf a gesetzt ist kind
, TextItem.PARAGRAPHTEXT
daher würde die Herabsetzung des Textumbruchs zusätzliche eigene Berechnungen erfordern, da der PARAGRAPHTYPE einen Umbruch erfordert. In Bezug auf etwas Umsetzbares ist ein kleiner Drilldown erforderlich, um dorthin zu gelangen ...
var doc = activeDocument;
var artLayer = activeDocument.activeLayer;
var textItem = artLayer.textItem;
textItem.kind = TextType.PARAGRAPHTEXT
alert(textItem.width + ", " + textItem.height);
Ich bezweifle jedoch die zurückgegebenen Werte, da die 6-pt-Typ des Wortes „HALLO“ in Times die Abmessungen von 1,49817590332031 pt Breite und 0,69983995056152 pt Höhe zurückgab. Das ist schrecklich falsch, da es ~3 pt mal ~19 pt ist.
Die einzige andere Möglichkeit, die mir einfällt, um die Abmessungen zu erhalten, wäre, den Typ in eine einfache Box zu setzen, kein Umwickeln, auf die Pixelfarbe oben links zuzuschneiden und Ihre Abmessungen auf diese Weise zu erhalten, also ...
var doc = activeDocument;
activeDocument.trim (TrimType.TOPLEFT);
alert(activeDocument.height + ", " + activeDocument.width);
... was 4,248 pt mal 19,368 pt ergibt, dem ich viel mehr vertraue. Aber das ist immer noch eine Trimmaktion, die davon ausgeht, dass sich der Zieltext in einem Dokument befindet.
height
und width
geben die Maße des Begrenzungsrahmens des Absatzes zurück, denke ich ... richtig? Was die albernen Werte erklären
würde , aber ich bin mir nicht sicher, wie Sie so kleine Begrenzungsrahmenwerte erhaltenDies ist eine wirklich verrückte Methode, aber Sie könnten die Textebene rastern und dann messen:
var artLayerRef = activeDocument.activeLayer;
var newLayer = artLayerRef.duplicate();
newLayer.rasterize(RasterizeType.ENTIRELAYER);
var width = newLayer.bounds[2] - newLayer.bounds[0];
newLayer.remove();
alert(width);
Ich klone die Ebene, rastere sie, ermittle die Breite und lösche sie dann.
Basierend auf der obigen Methode, gleiches Prinzip. Dies ist eine äußerst dumme Art, dies zu tun, aber ich sehe keine Methoden in der Skriptreferenz, die es Ihnen ermöglichen würden, dies auf andere Weise einfach zu erreichen.
Im Wesentlichen setzen wir die Breite des Dokuments auf das Maximum (30.000 Pixel) und das gleiche für das Textfeld. Wenn Ihr Text breiter als 30.000 Pixel ist, funktioniert dies nicht.
preferences.rulerUnits = Units.PIXELS;
var artLayerRef = activeDocument.activeLayer;
var originalUnit = preferences.rulerUnits;
var docH = activeDocument.height;
var docW = activeDocument.width;
var newLayer = artLayerRef.duplicate();
var textItem = newLayer.textItem;
//It might help if the text box's x coordinate is 0 but shouldn't really matter
activeDocument.crop([0, 0, 30000, docH]); // 30000px = maximum width
textItem.width = 30000;
newLayer.rasterize(RasterizeType.ENTIRELAYER);
var width = newLayer.bounds[2] - newLayer.bounds[0];
newLayer.remove();
activeDocument.crop([0, 0, docW, docH]);
preferences.rulerUnits = originalUnit;
alert(width);
Ich entschuldige mich, aber Ihrer Frage fehlt es an Details darüber, was Sie erreichen möchten. Aufgrund der Tatsache, dass Sie ein Skript verwenden wollten, kann ich vorschlagen, sich Imagemagick anzusehen ? Imagemagick ist terminalbasiert und Sie können Textoptionen skripten, wenn Sie dies erreichen möchten.
JohnB
Gewähren
JohnB
Scott