Antworten auf deine Fragen:
Neues Thema erstellen

[CC] - Hilfslinien (Raster) auf Ebene rastern

Bernsch

Nicht mehr ganz neu hier

Hallo.
Eine Frage: "Ist es möglich in PS ein Hilfslinienraster auf eine Ebene zu rastern? Also das die Hilfslinien sozusagen zu Pixel (Stärke 1px) werden?"
 

Photoshop

Frank Ziemann

Aktives Mitglied

Nicht direkt.
Einzige Möglichkeit wäre ein Screenshot falls das Bild nicht größer als dein Monitor ist.
Dazu die Hilfslinien vor einem weißen Hintergrund anzeigen lassen, und über die Menüleiste "Ansicht ->Bildschirmmodus -> Vollbildmodus" alles außer dem Bild ausblenden.
Dann mit der "Druck" Taste einen Screenshot erstellen, einen neues Dokument mit den Monitorabmessungen erstellen und dort den Screenshot einfügen.
Dann doppel klick auf die Ebene um die Stile zu öffenen, dort kannst du über Mischoptionen -> Mischen wenn... -> Diese ebene" das weiße transparent machen so das du nur noch die Hilfslinien hast. Diese Ebene kannst du dann in dein Ausgangs Bild als neue Ebene duplizieren.
Ist das Bild kleiner als dein Monitor musst du es vorher noch zuschneiden.
 
G

Gelöschtes Mitglied 633957

Guest

Ist es möglich in PS ein Hilfslinienraster auf eine Ebene zu rastern?
Ich nehme das was @virra sagt!
Doch auch wenn sich das Raster nicht rastern lässt, kann man dennoch ein eigenes zeichnen.

Ich konnte auf die Schnelle kein Skript finden und habe selber eines geschrieben. Es ist rechenintensiv, hat keine Fallbacks... Mit anderen Worten: Es weit von einem professionellen Skript entfernt, tut aber seinen Job!

Datei von filehorst.de laden

Nach dem Kopieren in Photoshop's Skripteverzeichnis, ist das Skript im Menü "Filter" zu finden.

Edit: Link aktualisiert
 
Zuletzt bearbeitet von einem Moderator:

Frank Ziemann

Aktives Mitglied

Warum willst du den die Hilfsleinen Rastern? Vielleicht gibt es ja auch eine andere Lösung.
Wie gesagt, Screenshot geht, von Hand nachzeichnen geht, mit Script geht.

Falls du aber einfach nur immer wieder die gleichen Hilfslinien brauchst kannst du die auch einfach abspeichern.
Wenn du ein fertiges Bild mit vielen Hilfslinien hast und diese für ein weiteres Bild verwenden willst speicherst du erst ein mal dein Bild ab. Dann löschst du alle Ebenen bis auf eine transparente Ebene, jetzt siehst du also nur noch die Hilfsleinen, diese Datei speicherst du dann unter dem Namen "Hilfslinien" ab. Wenn du diese Datei dann später öffnest hast du die Hilfslinien direkt wieder und kannst in dieses Dokument dein neues Bild kopieren..
Klappt natürlich nur wenn das neue Bild so groß ist wie das alte.
 
G

Gelöschtes Mitglied 633957

Guest

Ich bin noch einmal ans Skript rangegangen...
Datei von filehorst.de laden

Nicht ganzzahlige, reelle Zahlen (oder wie auch immer die korrekte Bezeichnung einer Kommazahl ist) können nun in deutscher Schreibweise (Komma anstelle eines Punkts) eingegeben werden und ich habe eine zusätzliche Abfrage eingefügt, um die Rasterabstände entweder in Pixel oder Prozent eingeben zu können.
Mehr Zeit werde ich aber nicht in das Skript investieren, sofern niemandem ein gravierender Fehler auffällt.

Edit: Link aktualisiert
 
Zuletzt bearbeitet von einem Moderator:

mm100

Benutzer

Nettes Teil.

Mehr Zeit werde ich aber nicht in das Skript investieren ...
Hat auch so bestimmt schon seine 2 - 3 Stunden gebraucht. Und wie @ph_o_e_n_ix immer so schön sagt: Niemand dankt es dir.
Und der Großteil der Arbeit - optimieren, austesten, dausicher machen - würde erst noch vor dir liegen. das macht dann nur Spaß, weil du selbst noch etwas dabei lernst.

... sofern niemanden ein gravierender Fehler auffällt.

Einen gravierenden Fehler gibt es schon.
Deine 1 Pixel Linien liegen immer auf 2 Pixeln.

Tausche den Bereich mit deinen Schleifen
Code:
var ihon = dcHeight / pxVask;
var ivon = dcWidth / pxHask;

for (i = 0; i <= ihon; i++) {
    var wkMess = pxVask * i;
    var startPoint = [0, wkMess];
    var endPoint = [dcWidth, wkMess];
    var lineWidth = pxWidth;
    drawLine( startPoint, endPoint, lineWidth );
    }

for (i = 0; i <= ivon; i++) {
    var wkMess = pxHask * i;
    var startPoint = [wkMess, 0];
    var endPoint = [wkMess, dcHeight];
    var lineWidth = pxWidth;
    drawLine( startPoint, endPoint, lineWidth );
    }

durch diesen Teil aus
Code:
var ihon = (dcHeight-1) / pxVask;
var ivon = (dcWidth-1) / pxHask;

for (i = 0; i <= ihon; i++) {
    var wkMess = pxVask * i;
    var startPoint = [0, wkMess+0.5];
    var endPoint = [dcWidth, wkMess+0.5];
    var lineWidth = pxWidth;
    drawLine( startPoint, endPoint, lineWidth );
    }

for (i = 0; i <= ivon; i++) {
    var wkMess = pxHask * i;
    var startPoint = [wkMess+0.5, 0];
    var endPoint = [wkMess+0.5, dcHeight];
    var lineWidth = pxWidth;
    drawLine( startPoint, endPoint, lineWidth );
    }
 
G

Gelöschtes Mitglied 633957

Guest

Einen gravierenden Fehler gibt es schon.
Deine 1 Pixel Linien liegen immer auf 2 Pixeln.
Du hast vollkommen Recht, die Linien orientieren sich am Pixel Mittelpunkt, was bei einer ungeraden Linienbreite zu einem unsauberen Ergebnis führt. Vielen Dank für den Hinweis! :daumenhoch

Ich habe das Skript entsprechend bearbeitet. Hier der aktuelle Link:
Datei von filehorst.de laden

Hat auch so bestimmt schon seine 2 - 3 Stunden gebraucht.
Das stimmt! Es war halt ein witziges, kleines Projekt für den Abend. Den Anspruch an ein perfektes Skript hatte ich nun nicht gerade, doch einigermaßen anständig soll es dann schon sein. Daher nochmals ein...
:danke:

Tausche den Bereich mit deinen Schleifen
Da habe ich mich allerdings dagegen entschieden, bitte nicht übel nehmen, da wenn die jeweils letzte Linie auf den letzten Pixel des Dokuments treffen würde, mit einer positiven Verschiebung, versucht werden würde außerhalb des Dokuments zu zeichnen und das Skript dann abbrechen würde. Außerdem würde bei einer geraden Linienbreite (z.B: 2 Pixel), dass gleiche Problem auftreten, wie es bei der ungeraden Stärke der Fall war.

Stattdessen habe ich mich für eine if-Abfrage entschieden.
Code:
if(wkMess != dcWidth) {
if(pxWask % 2 != 0) {
  wkMess = wkMess + 0.5;
}
} else {
if(pxWask % 2 != 0) {
  wkMess = wkMess - 0.5;
}
}
Wenn nicht der letzte Pixel der Fläche und Linienstärke ungerade, dann um +0,5 Pixel verschieben; wenn letzter Pixel und ungerade dann um -0,5 verschieben. Wenn Linienstärke gerade ist, wird alles beim Alten belassen.
So müsste es jetzt eigentlich passen, wenigstens für Linienstärken und Rasterabstände mit ganzen Zahlen. Ich werde jetzt nicht anfangen für jede Nachkomma-Kombination die Linien passend zu verschieben. Ich hoffe, das sieht man mir nach.

Edit: Rechtschreibung

Edit2:
@mm100, ich habe Dir Unrecht getan, bitte entschuldige! Beim korrigieren meines vorherigen Posts (habe eine Kommazahl ganz frech eine ungerade Zahl genannt, was natürlich nicht ganz richtig ist) ist mir aufgefallen, dass Du vorgeschlagen hast, vor den Schleifen, horizontal und vertikal um minus einen Pixel zu verschieben. So würde das natürlich funktionieren. Das habe ich beim ersten Lesen deines Posts übersehen.
Auf Grund der geraden und ungeraden Linienstärken und der Möglichkeit eine Linie zu zeichnen, wird der jeweils letzte Pixel des Dokuments bzw. der Zeichenfläche getroffen, werde ich aber bei meiner Lösung mit den if-Abfragen bleiben.

Edit3: Link aktualisiert
 
Zuletzt bearbeitet von einem Moderator:
G

Gelöschtes Mitglied 633957

Guest

Die vielen Dialogboxen waren mir irgendwie ein Dorn im Auge und so habe ich dem Skript eine kleine Benutzeroberfläche spendiert. Außerdem ist die Farbauswahl erweitert. Ich habe beim Layout versucht einen Kompromiss zwischen CS und CC zu finden.

Datei von filehorst.de laden

Sollten noch Fehler auffallen, gerne melden, doch bitte nicht bei hinnehmbaren Kleinigkeiten. Es steckt langsam genug Zeit in dem Skript!

Edit: Link aktualisiert
 
Zuletzt bearbeitet von einem Moderator:

mm100

Benutzer

Hallo ty,
so ist das, wenn einen das Programmieren "gepackt hat".
:D

Ich werde die neue Version gerne testen. Bei der alten ist mir eine Kleinigkeit aufgefallen: das Raster beginnt oben und links mit einer halben oder bei ungeraden Breiten mit etwas mehr als einer halben "Hilfslinie". Sollte eigentlich mit der vollen Breite beginnen. Oder nicht?

Und die letzten Rasterzellen rechts und unten ist bei manchen Einstellungen ein Pixel kleiner als alle anderen.

Noch ein Wort an den TO @Bernsch
Du hättest dich in der vergangenen Woche wenigstens mal zu den Bemühungen von @tynick äußern können! So aber vergrault man einen Helfer nach dem anderen!!!

Manchmal kommen dann noch fadenscheinige Ausreden: Computer kaputt, krank, weggefahren …
Aber in deinem Profil steht: zuletzt gesehen heute um 10:55

Wenigstens ein Dankeschön hätte ty verdient!
Und falls das Skript nicht deinen vagen Anforderungen entspricht:

Eine Frage: "Ist es möglich in PS ein Hilfslinienraster auf eine Ebene zu rastern? Also das die Hilfslinien sozusagen zu Pixel (Stärke 1px) werden?"

dann schreib das doch einfach!
Genauso gut kann es sein dass du ein vorhandenes Hilfslinienraster als Pixelebene willst. Da macht das Skript nämlich nicht.
 
G

Gelöschtes Mitglied 633957

Guest

Bei der alten ist mir eine Kleinigkeit aufgefallen: das Raster beginnt oben und links mit einer halben oder bei ungeraden Breiten mit etwas mehr als einer halben "Hilfslinie". Sollte eigentlich mit der vollen Breite beginnen. Oder nicht?
Nicht wenn Linienstärke größer 1px. Dann wird Links und Oben etwas von der Stärke weggenommen um auch die äußeren Rasterabstände identisch zu halten.
Und die letzten Rasterzellen rechts und unten ist bei manchen Einstellungen ein Pixel kleiner als alle anderen.
Wenn z.B. das Dokument eine Größe von 2000x2000 px hat und man mit einer Linienstärke von 2px, einen Abstand von 100x100 eingibt, oder etwas entsprechendes, würden in diesem Fall die äußeren Linien (o., u., li., re.) 1px betragen und der Rest der Linien, die eingegebenen 2px. Das dient dazu, wie oben beschrieben, alle Rasterinnenabstände identisch zu halten.

Oder meinst Du etwas anderes?

Edit: Ich habe den Link noch einmal aktualisiert.
Die maximale Linienstärke liegt nun bei 25px und es erfolgen weitere (interne) Abfragen um Fehleingaben und Unsinn zu umgehen, wie z.B.: Raster kleiner als Linienstärke.
 
Zuletzt bearbeitet von einem Moderator:

mm100

Benutzer

erstes Feedback:
das Dialogfeld ist deutlich benutzerfreundlicher
:daumenhoch

ein Dokument mit den 221 mal 200 Pixeln bringt das Skript bei Standardeinstellungen zum Absturz (Meldung: Abbruch durch den Benutzer)
 
G

Gelöschtes Mitglied 633957

Guest

ein Dokument mit den 221 mal 200 Pixeln bringt das Skript bei Standardeinstellungen zum Absturz
:danke:
Stimmt, bei exakt den Maßen läuft eine Schleife Amok... Mit einem Pixel mehr oder weniger ist wieder alles gut.
Da muss ich wohl noch einmal an die Berechnung ran, so'n Ärger! :mad::D

Ich werde mich am Sonntag noch einmal ans Skript machen.
Wenn noch etwas auffällt, gerne hier sammeln. :eek:
 

mm100

Benutzer

Ich meine diesen Fehler. Ich habe absichtlich breitere Linien mit kleinem Raster genommen. Da sieht man die letzten Rasterzellen besser
Bild 200 mal 200 Pixel
breite 3 Pixel
raster 5 Pixel
links oben ist gut


unten rechts fehlt was


bei 5 Pixel breite und raster 10 das gleiche
 
G

Gelöschtes Mitglied 633957

Guest

Bild 200 mal 200 Pixel
breite 3 Pixel
raster 5 Pixel
Da sollte eigentlich nur ein 2px Rahmen gezeichnet werden, da 2*3 > 5 ist.
bei 5 Pixel breite und raster 10 das gleiche
Das kann ich leider nicht nachstellen, ich habe da einen sauberen 3px Rand mit 5px Strichen innen.

Nutzt Du die letzte Version des Skripts? Vor knapp 30 Minuten habe ich den Link noch einmal aktualisiert.
 

mm100

Benutzer

Ja, habs grad noch mal runtergeladen.
Und ich hab vorher irgendwie die falschen Werte geschrieben.

hier 200 x 200 mit breite 5 und raster 10
rechts und unten fehlt wieder ein Pixel


Scheint nur bei bestimmten Werten und dann immer nur rechts und unten aufzutreten. In der Mitte ist bisher immer alles ok.
 

mm100

Benutzer

Ja. Gute Nacht
:)

Mir ist grade noch was aufgefallen. Die Werte im letzten Screenshot stimmen. Aber wieso hat das Raster bei einer Rasterweite von 10 innen 15 Pixel ???
:confused:
 
G

Gelöschtes Mitglied 633957

Guest

wieso hat das Raster bei einer Rasterweite von 10 innen 15 Pixel ???
Weil das Script versuchen sollte mitzudenken... Bei 5px Strichstärke alle 10px bleibt kein Innenabstand für das Raster. Daher wird es erweitert. Grundsätzlich fand ich das eine gute Idee, doch die Umsetzung ist eher suboptimal.

Ich habe heute Mittag noch einmal über das Script geschaut und es macht genau was es soll. Leider, in diesem Fall. Mir ist aufgefallen, dass ich beim Schreiben zwei gravierende Denkfehler gemacht habe. (Einer davon so peinlich, dass ich diese ab sofort totschweigen werde!)

Ich setze mich morgen definitiv noch ans Script und werde dem Code ein wenig mehr Sinn einflößen.
 

Andre_S

unverblümt

Dieser Code verteilt ein Raster mit sauberen Kanten anzahlmäßig in Breite und Höhe mit sauberen Kanten ohne Außenrahmen.
Will man einen bestimmten Rasterabstand muss man vorher halt etwas rechnen.
Code:
#als .jsx abspeichern
#target Photoshop 
app.bringToFront(); 
function main(){ 
if(!documents.length) return; 
var win = new Window( 'dialog', 'Draw Lines' );   
g = win.graphics; 
var myBrush = g.newBrush(g.BrushType.SOLID_COLOR, [0.99, 0.99, 0.99, 1]); 
g.backgroundColor = myBrush; 
win.orientation='row'; 
win.p1= win.add("panel", undefined, undefined, {borderStyle:"black"});   
win.g1 = win.p1.add('group'); 
win.g1.orientation = "row"; 
win.title = win.g1.add('statictext',undefined,'Draw Lines'); 
win.title.alignment="fill"; 
var g = win.title.graphics; 
g.font = ScriptUI.newFont("Georgia","BOLDITALIC",22); 
win.g5 =win.p1.add('group'); 
win.g5.orientation = "row"; 
win.g5.alignment='fill'; 
win.g5.spacing=10; 
win.g5.st1 = win.g5.add('statictext',undefined,'Number of lines Vertical'); 
win.g5.st1.preferredSize=[150,20]; 
win.g5.et1 = win.g5.add('edittext',undefined,'0'); 
win.g5.et1.preferredSize=[50,20]; 
win.g5.et1.onChanging = function() {   
  if (this.text.match(/[^\-\.\d]/)) {   
    this.text = this.text.replace(/[^\-\.\d]/g, '');   
  }   
}; 
win.g10 =win.p1.add('group'); 
win.g10.orientation = "row"; 
win.g10.alignment='fill'; 
win.g10.st1 = win.g10.add('statictext',undefined,'Number of lines Horizontal'); 
win.g10.st1.preferredSize=[150,20]; 
win.g10.et1 = win.g10.add('edittext',undefined,'0'); 
win.g10.et1.preferredSize=[50,20]; 
win.g10.et1.onChanging = function() {   
  if (this.text.match(/[^\-\.\d]/)) {   
    this.text = this.text.replace(/[^\-\.\d]/g, '');   
  }   
}; 
win.g15 =win.p1.add('group'); 
win.g15.orientation = "row"; 
win.g15.alignment='fill'; 
win.g10.st1 = win.g15.add('statictext',undefined,'Line Width'); 
win.g10.dd1 = win.g15.add('dropdownlist'); 
for(var t =1;t<21;t++){ 
    win.g10.dd1.add('item',t); 
    } 
win.g10.dd1.selection=0; 
win.g100 =win.p1.add('group'); 
win.g100.orientation = "row"; 
win.g100.alignment='fill'; 
win.g100.bu1 = win.g100.add('button',undefined,'Add Lines'); 
win.g100.bu1.preferredSize=[110,25]; 
win.g100.bu2 = win.g100.add('button',undefined,'Cancel'); 
win.g100.bu2.preferredSize=[110,25]; 
win.g100.bu1.onClick=function(){ 
win.close(0); 
var horz = Number(win.g10.et1.text); 
var vert = Number(win.g5.et1.text); 
var lineWidth = win.g10.dd1.selection.index + 1; 
var crossHatch = activeDocument.artLayers.add();   
crossHatch.name = "Draw Lines"; 
var spaceH = activeDocument.height.as('px')/(horz+1); 
var spaceV = activeDocument.width.as('px')/(vert+1); 
var spcH = spaceH; 
var spcV = spaceV; 
for(var a =0;a<horz;a++){ 
   lineHorzVert(spcH,'H',lineWidth); 
   spcH +=spaceH; 
} 
for(var v =0;v<vert;v++){ 
    lineHorzVert(spcV,'V',lineWidth); 
    spcV +=spaceV; 
} 
     
function lineHorzVert(space,HV,strokeWidth) { 
if(HV.toLowerCase() == 'h'){ 
    HV = 'Sngr'; LT = 'Top '; 
    }else{ 
         HV = 'Sngc'; LT = 'Left'; 
        } 
var Black = new SolidColor(); 
Black.rgb.hexValue = '000000'; 
    var desc = new ActionDescriptor(); 
        var ref = new ActionReference(); 
        ref.putProperty( charIDToTypeID('Chnl'), charIDToTypeID('fsel') ); 
    desc.putReference( charIDToTypeID('null'), ref ); 
        var desc2 = new ActionDescriptor(); 
        desc2.putUnitDouble( charIDToTypeID(LT), charIDToTypeID('#Pxl'), space ); 
    desc.putObject( charIDToTypeID('T   '), charIDToTypeID(HV), desc2 ); 
    try{ 
    executeAction( charIDToTypeID('setd'), desc, DialogModes.NO ); 
    activeDocument.selection.stroke (Black, strokeWidth, StrokeLocation.CENTER, ColorBlendMode.NORMAL, 100, false); 
    activeDocument.selection.deselect(); 
    }catch(e){} 
} 
} 
win.center(); 
win.show(); 
} 
main();
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.564
Beiträge
1.538.064
Mitglieder
67.487
Neuestes Mitglied
MichaelSEivy
Oben