Ankündigung

Einklappen
Keine Ankündigung bisher.

Nach IPTC/EXIF Stichwörtern sortieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Nach IPTC/EXIF Stichwörtern sortieren

    Hallo zusammen

    Ich bin dabei eine Blumen Bilder-Galerie zu erstellen. Das hat bisher gut geklappt.
    Schreibt auch brav das Stichwort zum Bild dazu. (Code gefunden und zusammengebastelt)

    Momentan habe ich die Bilder im Bridge nach Stichwörtern sortiert und dann im Stapel den Dateinamen umbenannt.
    Ich möchte aber nicht immer die Dateien neu durchnummerieren und hochladen wenns was Neues gibt.
    Deshalb hoffe ich dass mir jemand helfen kann, dass ich nach Stichwörtern sortieren kann.

    Alle Bilder haben 2 Stichwörter, "Namen" und "Farbe"

    sortieren1: Nur nach "Namen"
    sortieren2: Erst nach "Farbe", dann nach "Namen"

    VIELEN DANK

    Bisheriges Ergebnis ist hier: http://wfg-design.ch/iptc-gal/


    PHP-Code:
    <?php
    chdir
    ('foto_lg');
    $files glob("*.*");
    for (
    $i=0$i<count($files); $i++)
    {
    $image $files[$i];
    $supported_file = array('jpg',);
    $ext strtolower(pathinfo($imagePATHINFO_EXTENSION));

    $img basename($image);
    $size getimagesize($img$info);
    if(isset(
    $info['APP13']))
    {
    $iptc iptcparse($info['APP13']);
    $keyword0 $iptc["2#025"][0];
    if(
    $keyword0 == "") {$keyword0 "";} else {$keyword0 $keyword0;}
    $keywords $keyword0;
    }
    {
    $filename substr("$img",11);
    $dataname substr($filename, (strrpos($filename".")));
    }
    {
    $iptc iptcparse($info['APP13']);
    $copyright $iptc["2#116"][0];
    if(
    $copyright == "") {$copyright "";} else {$copyright $copyright;}
    $copyright $copyright;
    }

    if (
    in_array($ext$supported_file)) {
    echo 
    '
    <div class="col-xs-12 col-sm-6 col-md-6 col-lg-4 col-xl-3 outerContent" id="theme"> <a class="example-image-link" href="iptc-gal/foto_lg/'
    ,$img,'" data-lightbox="example-set" data-title="'.$keywords.'<br><small>'.$dataname.'</small>"><div class="innerContent" style="background-image: url(iptc-gal/foto_sm/',$img,')"></div></a><p id="textinbild2">'.$keywords.'</p></div>';
    $keywords "" ;
    } else {
    continue;
    }
    }
    ?>

  • #2
    Wo sind denn die Stichwörter "Namen" und "Farbe" zu finden? Hast du ein Link zu einem Bild mit solchen Stichwörtern?

    Zum Code sage ich erstmal nur neu schreiben, enthält zu viel Unsinn wie
    PHP-Code:
    if($copyright == "") {$copyright "";} else {$copyright $copyright;}
    $copyright $copyright

    Kommentar


    • #3
      Speichere die Eigenschaften und die zugehörigen Dateinamen der Bilder in einer Datenbank, dann kannst du sortiert ausgeben wie du magst und bist viel flexibler, du kannst dafür Sqlite nutzen, welche standardmässig bei PHP dabei ist.
      Dein Script wirft zudem Fehler wenn die Bilder bearbeitet wurden und die IPTC Informationen damit verloren gehen.

      Kommentar


      • #4
        Zitat von jspit Beitrag anzeigen
        Wo sind denn die Stichwörter "Namen" und "Farbe" zu finden?
        Hab hier 11 Bilder mit je zwei Stichwörtern drin. (Mit Adobe Bridge eingetragen)
        http://fotoartz.ch/iptc/


        Wegem Neuschreiben hab ich leider keine Ahnung, hab immer nur gebastelt

        Kommentar


        • #5
          Zitat von protestix Beitrag anzeigen
          Speichere die Eigenschaften und die zugehörigen Dateinamen der Bilder in einer Datenbank, dann kannst du sortiert ausgeben wie du magst und bist viel flexibler, du kannst dafür Sqlite nutzen, welche standardmässig bei PHP dabei ist.
          Dein Script wirft zudem Fehler wenn die Bilder bearbeitet wurden und die IPTC Informationen damit verloren gehen.
          Hab mir schon oft Gedanken zu Datenbanken gemacht. Aber hier gehts darum, dass ich immer wieder neue Bilder "Nur auf den Server laden" muss und dann sind sie dabei

          Kommentar


          • #6
            Du kannst die Indexierung ja vorlagern - wenn Bild noch nicht in der Datenbank, dann alle Daten auslesen und eintragen, danach welche Aktion auch immer mit filtern, sortieren etc ausführen.
            [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

            Kommentar


            • #7
              Zitat von Oli472 Beitrag anzeigen
              Wegem Neuschreiben hab ich leider keine Ahnung, hab immer nur gebastelt
              Das ist natürlich schwach,für jemanden der sich mit Webdesign brüstet, sofern das oben deine Webseite ist.
              Wie dem auch sei, du lernst das jetzt eben oder du beauftragst jemanden damit dir das neu zu schreiben.

              Kommentar


              • #8
                Nicht nur unter Berücksichtigung des Kenntnisstandes von Oli472 sind Lösungen mit Datenbanken minimal zwei Nummern zu groß. Ich zeige mal einen möglichen Ansatz. Die Umsetzung wird für dich Oli472 schwer genug.
                Ich empfehle dir dringend, dich mit den Grundlagen der Programmierung zu beschäftigen.
                Im Schritt 1 wird ein mehrdimensionales Array aufgebaut. Dafür hab ich mir mal 3 Bilder als Beispiel geborgt. Den Pfad für $pattern must du anpassen.
                PHP-Code:
                $pattern "../../grafik/forum/*.jpg";
                $imgArr = array();
                foreach(
                glob($pattern) as $img) {
                  
                $size getimagesize($img$info);
                  
                $iptc iptcparse($info['APP13']);

                  
                $imgArr[] = array(
                    
                'file' => $img,
                    
                'name' => $iptc['2#025'][0],
                    
                'color' => $iptc['2#025'][1],
                  );
                }

                echo 
                "<pre>".var_export($imgArr,true)."</pre>"
                Mit der Testausgabe solltest du ewas in diser Art bekommen:
                PHP-Code:
                array (
                  
                =>
                  array (
                    
                'file' => '../../grafik/forum/001-img8472.jpg',
                    
                'name' => 'Akelei',
                    
                'color' => 'Lila&Violett',
                  ),
                  
                =>
                  array (
                    
                'file' => '../../grafik/forum/004-img_4706x.jpg',
                    
                'name' => 'Anemonen',
                    
                'color' => 'Weiss',
                  ),
                  
                =>
                  array (
                    
                'file' => '../../grafik/forum/019-img_1904x.jpg',
                    
                'name' => 'Baumblüten',
                    
                'color' => 'Rosa',
                  ),

                Die Sortierung kann mit Multisort erfolgen (Farbe, Name):
                PHP-Code:
                array_multisort(
                    
                array_column($imgArr,'color'), SORT_ASC,
                    
                array_column($imgArr,'name'),  SORT_ASC,
                    
                $imgArr
                );

                echo 
                "<pre>".var_export($imgArr,true)."</pre>"
                Ergebnis:
                PHP-Code:
                array (
                  
                =>
                  array (
                    
                'file' => '../../grafik/forum/001-img8472.jpg',
                    
                'name' => 'Akelei',
                    
                'color' => 'Lila&Violett',
                  ),
                  
                =>
                  array (
                    
                'file' => '../../grafik/forum/019-img_1904x.jpg',
                    
                'name' => 'Baumblüten',
                    
                'color' => 'Rosa',
                  ),
                  
                =>
                  array (
                    
                'file' => '../../grafik/forum/004-img_4706x.jpg',
                    
                'name' => 'Anemonen',
                    
                'color' => 'Weiss',
                  ),

                Wenn nur nach dem Namen sortiert werden soll wird die Zeile mit color einfach rausgenommen.
                Mit Multisort sind "nur" rein Alphabetische Sortierungen möglich (Mit einigen Schönheitsfehlern bei Umlauten). Wenn dies nicht reicht, muss usort genommen werden.

                LG jspit

                Kommentar


                • #9
                  jspit

                  Vielen Dank. Konnte es auf mein Design umschreiben. Aber da muss irgendwie noch die Sortierfunktion rein vor der Ausgabe. Das hab ich in der Kürze nicht gecheckt.


                  PHP-Code:
                  <?php
                      chdir
                  ('../iptc-gal/foto_sm');
                  $pattern "*.*";

                  $imgArr = array();
                  foreach(
                  glob($pattern) as $img) {
                      
                  $size getimagesize($img$info);
                      
                  $iptc iptcparse($info['APP13']);

                  $keywords $iptc["2#025"][0];

                  $filename substr("$img",4);
                  $dataname substr($filename, (strrpos($filename".")));

                      
                  $imgArr[] = array(
                          
                  'file' => $img,
                          
                  'name' => $iptc['2#025'][0],
                          
                  'color' => $iptc['2#025'][1],
                      );


                  array_multisort(
                     
                  /* array_column($imgArr,'color'), SORT_ASC,*/
                      
                  array_column($imgArr,'name'),  SORT_ASC,
                      
                  $imgArr
                  );


                             echo 
                  '<div class="col-xs-12 col-sm-6 col-md-6 col-lg-4 col-xl-3 outerContent" id="theme"> <a class="example-image-link" href="../iptc-gal/foto_sm/',$img,'" data-lightbox="example-set" data-title="'.$keywords.'<br><small>'.$dataname.'</small>"><div class="innerContent" style="background-image: url(../iptc-gal/foto_sm/',$img,')"></div></a><p id="textinbild2">'.$keywords.'</p></div>';
                      }
                  ?>
                  http://wfg-design.ch/iptc-gal/test.php


                  Kommentar


                  • #10
                    Du kannst nicht alles in einem foreach erschlagen, denn array_multisort() benötigt das komplette Array $imgArr und hat nichts in der Schleife zu suchen. Du brauchst hier schon 2 Schleifen:
                    PHP-Code:
                    foreach(glob($pattern) as $img) {
                      
                    //..
                    }

                    array_multisort(..);

                    foreach(
                    $imgArr as $imgElement){
                      
                    //Daten zurechtstutzen
                      
                    $baseName basename($imgElement['file']);

                      
                    //..

                    Auf chdir() würde ich generell verzichten. chdir() ändert das aktuelle Arbeitsverzeichnis global in deinem Skript und das kann an anderen Stellen zu Problemen führen.
                    Besser ist:
                    PHP-Code:
                    $pattern __DIR__"/../iptc-gal/foto_sm/*.*"
                    zu nehmen. Im Array hast du dann unter den Schlüssel 'file' den kompletten Pfad zu deiner Grafikdatei. Im 2. foreach must du dir alle Informationen aus dem Array holen die du für die Ausgabe benötigst.
                    Um z.B. den Dateinamen zu holen hat php die spezielle Funktion basename(). Das hab ich mal angedeutet.

                    Kommentar


                    • #11
                      So, habs geschafft

                      Vermutlich noch bisschen Kosmetik vom Code nötig, aber es funktioniert.

                      PHP-Code:
                      <?php
                      $pattern 
                      "foto_sm/*.*";

                      $imgArr = array();
                      foreach(
                      glob($pattern) as $img) {
                          
                      $size getimagesize($img$info);
                          
                      $iptc iptcparse($info['APP13']);


                      $imgArr[] = array(
                          
                      'file' => $img,
                          
                      'name' => $iptc['2#025'][0],
                          
                      'color' => $iptc['2#025'][1],
                          
                      'filename' => substr("$img",8),
                      );

                         }   

                      array_multisort(
                          
                      //array_column($imgArr,'color'), SORT_ASC,
                          
                      array_column($imgArr,'name'),  SORT_ASC,
                          
                      $imgArr
                      );

                      foreach(
                      $imgArr as $imgElement){  

                      $pfad basename($imgElement['file']);
                      $name basename($imgElement['name']);
                      $color basename($imgElement['color']);
                      $filename basename($imgElement['filename']);

                      echo 
                      '<div class="col-xs-12 col-sm-6 col-md-6 col-lg-4 col-xl-3 outerContent" id="theme">
                      <a class="example-image-link" href="iptc-gal/foto_lg/'
                      ,$pfad,'" data-lightbox="example-set"
                      data-title="'
                      ,$name,'<br><small>',$filename,'</small>"><div class="innerContent"
                      style="background-image: url(iptc-gal/foto_sm/'
                      ,$pfad,')"></div></a>
                      <p id="textinbild2">'
                      ,$name,'</p></div>';

                      }

                      ?>
                      Vielen Dank an jspit für Deine Hilfe und Geduld.

                      https://wfg-design.ch/iptc-gal/foto_col.php

                      Kommentar

                      Lädt...
                      X