tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
17
ZUGRIFFE
972
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    N Abend Allesamt..

    So, sitze gerade an Photoshopscripting in JS. Und prompt stoße ich auf eine Sache, die ich gerne von Euch erklärt haben möchte:

    Ich erstelle anfangs ein Array mit mehreren Begriffen aus der Fotografie - landscape, stills, people etc.. Im nächsten Schritt möchte ich daraus Checkboxes machen, damit der User Keywords für sein Foto wählt. Diese Keywords werden in die EXIF-Daten eingeschrieben, Mehrfachwahl also möglich.

    In aller Kürze : Wie erstelle ich für jedes String-Objekt aus dem Array eine eigene Checkbox über eine for(each)-Schleife ?

    Hier relevante Auszüge aus dem Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    var Eingabe = new Window(blabla);
    Eingabe.EXIFpnl = Eingabe.add(new Panel blabla);
     
    var Keywords=new Array('landscape','people','architecture','monochrome','stills','flora fauna','etc');
     
    var zaehler=0;
    for each(var name in Keywords) { 
      Eingabe.EXIFpnl.[COLOR="Red"]name[/COLOR] = Eingabe.EXIF.add ('checkbox',[[COLOR="Green"]95,50,150,80[/COLOR]],name);
    }

    Abgesehen davon, dass sogar der for each-Aufruf falsch sein könnte geht es mir eher um die Initialisierung des Zielobjekts (Rot), da ich dort ja keine Variablen benutzen darf, oder?

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin chmee,


    Zitat Zitat von chmee Beitrag anzeigen
    Abgesehen davon, dass sogar der for each-Aufruf falsch sein könnte
    Das ist er, zumindest in JS wie ich es kenne....k.A. ob es da in PS Untershchiede gibt.
    Code :
    1
    
    for(var name in Keywords)
    wäre korrekt.

    Bei dem Rest bin ich etwas überfordert...was soll das werden?
    Was für Checkboxen...und was ist Eingabe und add()?

    Sorry, hab keine Ahnung von Photoshopping
     

  3. #3
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    Das Scripting in Photoshop hält sich schon an die Konventionen der jeweiligen Sprachen, ich hab auf die Schnelle for each gefunden, was aber ab JS1.6 dabei sein soll. Der Rest, naja, ob Photoshop oder nicht,das ist nicht erheblich, es geht darum, wie man Objekte instanziert erstellt ( add vergleichbar mit new ).

    Denn:
    Code :
    1
    
    for(var name in Keyword) { var "name" = new Objekt() }
    würde Erstens sicherlich einen Fehler rauswerfen, Zweitens (wenn es ginge) das Objekt des letzten Schleifendurchlaufs überschreiben. Kurzum : Wie erstelle ich in einer Schleife eindeutig benannte Objekte? Ähm, mehrere Instanzen des gleichen Objekts.. Oh je, ich hoffe das was verständlich..

    mfg chmee

    p.s.: Wenns fertig ist, pack ich's in den Photoshopbereich, versprochen.
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Hier mal nen Beispiel, vielleicht geht es ja in die Richtung von dem, was du meinst;
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    <script type="text/javascript">
    <!--
    var Keywords=new Array('landscape','people','architecture','monochrome','stills','flora fauna','etc');
     
    Eingabe={'EXIFpnl':{},'EXIF':{'add':function(a,b,c){return({'type':a,'array':b,'name':c});}}};
     
     
    for(var i in Keywords) { 
      Eingabe.EXIFpnl[Keywords[i]] = Eingabe.EXIF.add ('checkbox',[95,50,150,80],Keywords[i]);
    }
    alert(Eingabe.EXIFpnl.toSource());
    //-->
    </script>
    (Der alert am Ende zum Anschauen des Ergebnisses geht nur im FF)

    Das entscheidende, wonach du wohl suchst, ist dies:
    Code :
    1
    
    Eingabe.EXIFpnl[Keywords[i]] = Eingabe.EXIF.add ('checkbox',[95,50,150,80],Keywords[i]);

    aufs Wesentliche gekürzt:
    Code :
    1
    
    objekt['membername']=irgendwas;
     

  5. #5
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    Ich werds morgen früh mal Testen, jetzt ist's zu spät Aber die wichtigsten Fragen jetzt gestellt, damit ich morgen früh was zum Verdauen hab :

    1. Wie nennt sich das ( {: {}: :}), was Du da machst ? Wo finde ich das in den JS-Guides..
    2. Die for.in-Anweisung (var i in Keywords) ist eigentlich nur die Kurzform von (var i=0;i<=Keywords.length;i++) ? Heisst also, i ist Int und nicht Keywords[i] ? Nicht, wie man es sich bei einer foreach sonst vorstellen würde..

    mfg chmee

    p.s.: Habe oben noch der Logik halber die anderen Objekte in den Code gepackt. Es sind ein Fenster (Window -> Eingabe) und ein Unterbereich (Panel -> EXIFpnl) in jenem Fenster, welches die Checkboxen innehaben sollen. Es sind grafische Objekte, vorgegeben durch den Adobe-Unterbau.
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  6. #6
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    Zitat Zitat von chmee Beitrag anzeigen
    1. Wie nennt sich das ( {: {}: :}), was Du da machst ? Wo finde ich das in den JS-Guides..
    2. Die for.in-Anweisung (var i in Keywords) ist eigentlich nur die Kurzform von (var i=0;i<=Keywords.length;i++) ? Heisst also, i ist Int und nicht Keywords[i] ? Nicht, wie man es sich bei einer foreach sonst vorstellen würde..
    1. JavaScript Object Notation
    2. ja, ein foreach($array as $key => $value) wie z.B. in PHP gibt es afaik nicht

    LG
    chmee bedankt sich. 
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  7. #7
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    Ihr beiden Racker. Danke und wieder ein Ganglion mit Wissen gefüllt Ach nee, Ganglion mit Wasser und Neuronen mit Wissen..

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    zu 1. man nennt es auch Initalizer, dein add() (oder new ) im Gegensatz dazu erstellt ein Objekt anhand eines Konstruktors.
    Details dazu findest du hier im JS-Handbuch: http://devedge-temp.mozilla.org/libr...j.html#1008327
    Der grosse Vorzug der 1. Variante(abgesehen von der in meinen Augen übersichtlicheren Schreibweise) ist, dass man nicht wie bei der Nutzung einer Konstrukor-Funktion Gefahr läuft, durch versehentliches Vergessen des new-Operators etwas ganz anderes zu Bewirken....denn ohne new aufgerufen befindet man sich in der Funktion im globalen Geltungsbereich(im Browser das window-Objekt)...und nicht in dem eines selbsterstellten Objektes.



    zu 2. jo, das i liefert nicht das, was du vielleicht erwartet hast.
    diese Schleife betrachtet den Array als Objekt(was er ja eigentlich ist).

    Angenommen, du hast einen Array
    Code :
    1
    
    ['foo','bar','foobar']

    dann sieht er als Objekt betrachtet so aus:
    Code :
    1
    
    {0:'foo',1:'bar',2:'foobar'}

    das i liefert in der Schleife als den Namen des Members, nicht dessen Inhalt.

    Von PHP her kennst du das bestimmt etwas anders beim Durchlaufen assoziativer Arrays, aber soetwas gibt es in JS nicht, auch wenn es manchmal den Anschein erwecken mag.
     

  9. #9
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    Ah, JSON, verd*, ich hab mir gerade Dein Code angeschaut. OK, ja das kenn ich.. Hmm trifft es aber nicht auf den Punkt..

    Die Schleife im ersten gezeigten Sourcecode soll eigentlich ein statisches Initialisieren verhindern. Wenn es statisch wäre (die EXIF-Keywords blieben gleich, somit auch kein Array nötig), hätte ich es stumpf reingehackt, und das könnte mit 4 Keywords zB so aussehen:

    Code :
    1
    2
    3
    4
    
    Eingabe.EXIFpnl.Button1 = Eingabe.EXIFpnl.add ('checkbox',[95,50,150,80],'landscape');
    Eingabe.EXIFpnl.Button2 = Eingabe.EXIFpnl.add ('checkbox',[95,90,150,120],'monochrome');
    Eingabe.EXIFpnl.Button3 = Eingabe.EXIFpnl.add ('checkbox',[95,130,150,150],'people');
    Eingabe.EXIFpnl.Button4 = Eingabe.EXIFpnl.add ('checkbox',[95,80,150,210],'stills');

    und anstatt es statisch zu machen, wollte ich ein Array am Anfang des Source legen, damit jeder Nutzer sich seine Keywords/Tags selbst setzen kann. Also Buttonanzahl abhängig von Arraylänge. Bild anbei, damit man sich etwas darunter vorstellen kann.

    mfg chmee
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken in for schleife mehrere Objekte erstellen-webworker_1.gif  
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  10. #10
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Bloss woher erfährt das Skript, welches der Keywords der Nutzer gewählt hat?
     

  11. #11
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    Deswegen habe ich ja (im ersten Post->Code) das Array Keywords eingebaut.

    Zu Erklärung des Scripts, es tut 3 Dinge :
    Erstmal das Bild in eine webtaugliche Größe schrumpfen ( Websizer)
    Dann ein Thumbnail generieren (Thumbnailer)
    Zu guter Letzt die gewählten EXIF-Tags/Keywords in die jpgs schreiben, für eine spätere Sortierung per php.

    Grundsätzlich kann man davon ausgehen, dass ein Fotograf auf seiner Seite eine bestimmte Galerieunterteilung hat. Diese Unterteilung schlägt sich in den Keywords nieder. Beim Aufruf der Seite kümmert sich dann php drum, die Bilder wieder im Keyword-Bereich (zB landscape) einzuordnen, Mehrfachnennungen möglich.

    Zu Deiner Frage : Welche der Keywords gewählt wurde, ist letztlich eine einfache if-Abfrage im Code (hier noch nicht erschienen), welche das Keyword - wenn es gewählt wurde - an ein String anfügt. Dieses String wird dann als EXIF-Data in die jpg geschrieben. Das, was Du bis jetzt an Code gesehen hast, ist nur für die Erstellung der Oberfläche zuständig.

    mfg chmee

    p.s.: Und ich dachte, ich würds in Kurz hinkriegen
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  12. #12
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Ich verstehs immer noch net

    Du hast da einen von dir festgelegten Array mit den Keywords....was soll dann dynamisch werden an dem Ganzen?

    Ich dachte, das, worüber wir bisher geredet haben, soll erstmal die Checkboxen erstellen...die Dynamik würde doch dann erst kommen, wenn der User die Keywords auswählt
     

  13. #13
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    Die Bedienoberfläche wird dynamisch aufgebaut, ist aber statisch, wenn sie erstmal aufgerufen ist.
    Also eher -ähm- php-serverside als js-ajax, wenn man es mit webseitencoding vergleichen würde..

    Das Problem ist ganz simpel, es geht wirklich nur um die Erstellung dieser Checkboxen, mehr nicht.
    Die Frage ist eigentlich, wie benutzt man Variablenergebnisse als Objektnamen ? #hust# äh

    Code :
    1
    2
    3
    
    var objektname = "koennte"+"soheissen"+"1";
    "objektname" = new window();
    "objektname".width = 300;

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  14. #14
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.451
    Hi,

    vielleicht hilft dir eval weiter:
    Code :
    1
    2
    3
    4
    5
    
    var intI = 0;
    var strPre = "pre_"
    eval(strPre + intI + " = new Object();");
    eval(strPre + intI + ".name = 'Quaese'");
    alert(pre_0.name);

    Ciao
    Quaese
    chmee bedankt sich. 
    Vielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
    ----
    Der "Fortsetzungsroman" auf www.leuteforum.de

    New kind to realize large scalable projects with jQuery: jQuery SDK

  15. #15
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    Au Backe, langer Rede kurzer Sinn, das ist es

    eval - The eval() function evaluates a string and executes it as if it was script code.

    mfg chmee

    Herzlichsten Dank für die Geduld Sven und Danke auch an Dich Quaese.
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

Ähnliche Themen

  1. C# Mehrere Strukturen in Schleife erstellen
    Von Zacha im Forum .NET Windows Forms
    Antworten: 1
    Letzter Beitrag: 21.05.10, 07:10
  2. AE: Bewegungsbahn für mehrere Objekte?
    Von ByeByeBeautiful im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 0
    Letzter Beitrag: 10.05.10, 10:36
  3. UVW - Mehrere Objekte ?
    Von aimheld im Forum Cinema 4D
    Antworten: 14
    Letzter Beitrag: 09.01.09, 20:57
  4. Schleife für mehrere checkboxen erstellen?
    Von theone101 im Forum .NET Windows Forms
    Antworten: 5
    Letzter Beitrag: 09.05.08, 06:56
  5. mehrere objekte
    Von coolerouny im Forum Java
    Antworten: 7
    Letzter Beitrag: 06.07.05, 17:06