Linuchs: Bilderflut darstellen, dazu Infos erfassen

Hallo,

ich bin etwas ratlos, wie ich die folgende Aufgabe mit möglichst geringem Aufwand in der Freizeit erledigen kann.

im Zusammenhang mit einem Jahrgangstreffen mehrerer Schulklassen habe ich 200 digitale Bilder bekommen, die nun "irgendwie" sinnvoll mit den Beteiligten aufbereitet werden sollen. Denkbar, dass noch Bilder nachgereicht werden.

Die Bilder zeigen 1 .. n Personen und sollen einen Titel bekommen sowie die Namen der dargestellten Personen.

Meine erste Idee: Die Bilder auf einer oder mehreren Webseiten zeigen, darunter eine Eingabemöglichkeit, welcher Anlass das ist und wer da zu sehen ist. Das "wer" geht wohl nur mit den Personen angehefteten Nummern.

Mir graust schon vor der Idee, die 200 Fotos von tw. 13 MB auf Darstellungsgröße zu bringen und jeder Person eine Zahl anzuheften.

Und dann weiter ... eine Datenbank mit Tabelle A, die nach und nach die Namen der erkannten Leute aufnimmt, Tabelle B mit den Dateinamen und Kurzbeschreibung der Fotos sowie Tabelle C, die Personen zu Fotos zuordnet.

Ich glaube, ich denke zu kompliziert, wie kann man das einfacher machen? Ich zweifle sehr daran, dass die Beteiligung den ganzen Aufwand rechtfertigt.

Linuchs

  1. Mir graust schon vor der Idee, die 200 Fotos von tw. 13 MB auf Darstellungsgröße zu bringen

    Dabei kann Dir der Computer helfen. Hier ein Ausschnitt daraus, wie ein Skript das für mich erledigt, das sollte Dir Anhaltspunkte bringen, wie Du das erledigen kannst. Darüber hinaus gibt es dafür auch fertige Software.

    # test auf Fehler:  
    if ($_FILES['file']['error']) {  
    	die ('Beim Hochladen trat ein Fehler auf. Versuchen Sie es erneut');  
    }  
      
    # Test auf Bild:  
    if ($_FILES['file']['type'] != 'image/jpeg'  
    && $_FILES['file']['type'] != 'image/jpg'  
    && $_FILES['file']['type'] != 'image/png'  
    && $_FILES['file']['type'] != 'image/bmp'  
    &&  $_FILES['file']['type'] != 'image/gif'  
    ) {  
    	die ('Die hochgeladene Datei ist kein JPG/PNG/GIF-Bild.');  
    }  
      
    # Test auf Dateigröße:  
    if ($_FILES['file']['size'] < 100) {  
    	die ('Die hochgeladene Datei ist zu klein. Laden Sie eine größere Version hoch.');  
    }  
      
    if ((! function_exists("imagecreatefromgif")) && $_FILES['file']['type'] != 'image/gif') {  
    	die ('Die hochgeladene Datei ist ein GIF-Bild, dass aus patentrechtlichen Gründen leider nicht verarbeitet werden kann. <br><br>Lösung:<br>Laden Sie eine andere Version des Bildes (.jpg, .png oder .bmp) hoch.');  
    }  
      
    $picdir      = $GLOBALS['PicFilesDir'];  
    $thumbdir    = $GLOBALS['ThumbFilesDir'];  
    $originaldir = $GLOBALS['originalFilesDir'];  
      
    if ($_FILES['file']['type'] == 'image/jpeg' OR $_FILES['file']['type'] == 'image/jpg') {  
    	$image = imagecreatefromjpeg($_FILES['file']['tmp_name']);  
    	$_FILES['file']['name']=str_replace('.jpg','.png',$_FILES['file']['name']);  
    	$_FILES['file']['name']=str_replace('.JPG','.png',$_FILES['file']['name']);	  
    	$_FILES['file']['name']=str_replace('.jpeg','.png',$_FILES['file']['name']);	  
    }  
    if ($_FILES['file']['type'] == 'image/png') {  
    	$image = imagecreatefrompng($_FILES['file']['tmp_name']);  
    }  
    if ($_FILES['file']['type'] == 'image/bmp') {  
    	$image = imagecreatefromwbmp($_FILES['file']['tmp_name']);  
    	$_FILES['file']['name']=str_replace('.png','.png',$_FILES['file']['name']);	  
    	$_FILES['file']['name']=str_replace('.PNG','.png',$_FILES['file']['name']);  
    }  
    if ($_FILES['file']['type'] == 'image/gif') {  
    	$image = imagecreatefromgif($_FILES['file']['tmp_name']);  
    	$_FILES['file']['name']=str_replace('.gif','.png',$_FILES['file']['name']);	  
    	$_FILES['file']['name']=str_replace('.GIF','.png',$_FILES['file']['name']);  
    }  
      
    list($width_orig, $height_orig) = getimagesize($_FILES['file']['tmp_name']);  
      
    if (file_exists($picdir.$_FILES['file']['name'])) {  
      $fileNameExtra='_'.date('YmdHis');  
      $_FILES['file']['name']=$_FILES['file']['name'].$fileNameExtra;  
    } else {  
    	$fileNameExtra=false;  
    }  
      
      
    # Bild auf 450px breite verkleinern und in bilder speichern  
      
    $width=450;  
    if ($width >= $width_orig) {  
    	$width=$width_orig;  
    	$height=$height_orig;  
    } else {  
    	$faktor=$width/$width_orig;  
    	$height=$height_orig*$faktor;  
    }  
    $image_p = imagecreatetruecolor($width, $height);  
    $weiss = imagecolorallocate($image_p, 255, 255, 255);  
    imagefilledrectangle($image_p, 0, 0, $width, $height, $weiss);  
    $trans_colour = imagecolorallocatealpha($image_p, 255, 255, 255, 127);  
    imagefill($image_p, 0, 0, $trans_colour);  
      
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);  
    imagepng($image_p, $picdir.$_FILES['file']['name'],3);  
      
    # Bild auf 125px breite verkleinern und in thumbnails speichern  
      
    $width=120;  
    if ($width > $width_orig) {  
    	$width=$width_orig;  
    	$height=$height_orig;  
    } else {  
    	$faktor=$width/$width_orig;  
    	$height=$height_orig*$faktor;  
    }  
    $image_p = imagecreatetruecolor($width, $height);  
    $weiss = imagecolorallocate($image_p, 255, 255, 255);  
    imagefilledrectangle($image_p, 0, 0, $width, $height, $weiss);  
    $trans_colour = imagecolorallocatealpha($image_p, 255, 255, 255, 127);  
    imagefill($image_p, 0, 0, $trans_colour);  
      
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);  
    imagepng($image_p, $thumbdir.$_FILES['file']['name'],9);  
      
    # Speichern des Bildes in Original-Größe:  
    $image_p = imagecreatetruecolor($width_orig, $height_orig);  
    $weiss = imagecolorallocate($image_p, 255, 255, 255);  
    imagefilledrectangle($image_p, 0, 0, $width_orig, $height_orig, $weiss);  
    $trans_colour = imagecolorallocatealpha($image_p, 255, 255, 255, 127);  
    imagefill($image_p, 0, 0, $trans_colour);  
      
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width_orig, $height_orig, $width_orig, $height_orig);  
    imagepng($image_p, $originaldir.$_FILES['file']['name'],1);  
      
    # Löschen des Uploads  
    unlink ($_FILES['file']['tmp_name']);  
    
    

    und jeder Person eine Zahl anzuheften.

    Tja. Auch das könnte man weitgehend automatisieren. Nur vermute ich, die dazu notwendige Software (Gesichtserkennung) ist nicht frei verfügbar.

  2. Schau Dir mal kphotoalbum an. Kann laut Paketbeschreibung auch HTML-Galerien erstellen.

    Gimp kann auch einiges.

    Es gibt dann noch Kandidaten:

    Fotoxx ist ein Programm, um digitale Fotos aufzubessern. Mit ihm können
    Sie große Bildordner mit Vorschaubildern durchsuchen, helle und dunkle
    Bilder zu HDR-Bildern (high dynamic range) verschmelzen, so dass Details
    in hellen und dunklen Bereichen besser sichtbar werden, sich überlappende
    Bilder zu Panoramen zusammensetzen, die Helligkeit und Farbsättigung für
    verschiedene Helligkeitsbereiche unterschiedlich anpassen, Nebel- und
    Trübheitseffekte durch Entfernen der »Weißheit« und Intensivieren der
    Farben abmindern, Bilder (in 90°-Schritten) rotieren, schräge Bilder
    begradigen, durch Blitzlichter entstandene rote Augen entfernen, Bilder
    schärfen, skalieren oder zurecht schneiden, Rauschen in dunklen Bildern
    unterdrücken, die Farbtiefe verändern und Bilder durch Ziehen der Maus
    verzerren.

    gThumb ist ein fortschrittlicher Bildbetrachter und -browser. Er hat viele
    nützliche Funktionen, wie das Durchsuchen des Dateisystems, eine Diashow,
    Bilderkataloge, Erzeugen eines Internet-Fotoalbums, Daten aus Kameras
    importieren, Bilder-CDs brennen, Dateien stapelweise verarbeiten sowie
    schnelle Bildbearbeitungsfunktionen wie Transformationen und
    Farbmanipulationen.

    Im Terminal:
    cthumb erlaubt es Ihnen themen-fähige Foto-Alben fürs WWW zu erstellen,
    d.h. Sammlungen von digitalen Bildern mit kleinen Thumbnails und
    Überschriften. Zusätzlich erlaubt es verschiedene Ansichten der
    Bildersammlung. Ein Album besteht aus einer Reihe von Seiten, die
    ihrerseits aus einer Sammlung von Bildern bestehen. Für jede Seite (und
    jedes Bild) können Sie verschiedene Anmerkungen anfügen. cthumb wird für
    jeden Anmerkungstyp eine eigene Version der Seite erzeugen.

    photon: Ein Python-basierter Fotoalbum-Generator mit einem sauberen Design, der
    von der Kommandozeile gestartet wird. Die HTML-Ausgabe kann mit Vorlagen
    konfiguriert werden.

    Features:
      * generates static HTML pages
      * slideshow (use of javascript is optional)
      * can use gimp to resize picture
      * keyboard navigation between images
      * works in any browser (Mozilla, Netscape Navigator 4.x, Konqueror, Opera)
      * each image can have a comment (with HTML tags)
      * image information (if taken from a digital picture) can be displayed
      * thumbnail image size can be selected by the user
      * output images can be scaled down
      * control over the number of thumbnails in a page

    Jörg Reinholz

  3. Hallo,

    Ich glaube, ich denke zu kompliziert, wie kann man das einfacher machen? Ich zweifle sehr daran, dass die Beteiligung den ganzen Aufwand rechtfertigt.

    Demoversion mit Mehrfachauswahl, der Möglichkeit zum Skalieren, Titel und Beschreibung hinzuzufügen.

    MfG

  4. @@Linuchs:

    nuqneH

    Meine erste Idee: Die Bilder auf einer oder mehreren Webseiten zeigen, darunter eine Eingabemöglichkeit, welcher Anlass das ist und wer da zu sehen ist. Das "wer" geht wohl nur mit den Personen angehefteten Nummern.

    Das Wer geht mit Computer Vision: automatische Gesichtserkennung. Nur möchte man sicher nicht die von Facebook oder anderer Spyware 2.0 einsetzen.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  5. Hi,

    im Zusammenhang mit einem Jahrgangstreffen mehrerer Schulklassen habe ich 200 digitale Bilder bekommen, die nun "irgendwie" sinnvoll mit den Beteiligten aufbereitet werden sollen. Denkbar, dass noch Bilder nachgereicht werden.

    Meine erste Idee: Die Bilder auf einer oder mehreren Webseiten zeigen, darunter eine Eingabemöglichkeit, welcher Anlass das ist und wer da zu sehen ist. Das "wer" geht wohl nur mit den Personen angehefteten Nummern.

    von den teilweise angesprochenen praktischen Aspekten mal ganz abgesehen: Das hört sich für mich so an, als wüssten die abgebildeten Personen zum Teil gar nichts von ihrem Glück. Also kommt noch ein rechtliches Problem dazu.

    Denn eigentlich musst du dich vor einer Veröffentlichung auch versichern, dass alle abgebildeten und erkennbaren Personen dieser Veröffentlichung auch zustimmen. Die Bilder zur Identifikation auf eine Webseite zu stellen, ist aber schon eine Veröffentlichung, bevor eine solche Zustimmung vorliegt. Catch-22. ;-)

    Viel Erfolg,
     Martin

    --
    Auch in Eckkneipen geht es manchmal rund.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Die Bilder zur Identifikation auf eine Webseite zu stellen, ist aber schon eine Veröffentlichung, bevor eine solche Zustimmung vorliegt.

      Abgesehen davon, dass man diese Webseite und die Bilder nicht für jeden ("öffentlich") zugänglich machen muss.

      Betreffs des verlinkten Skriptes:

      Ab Apache 2.4 ist ein stärkeres Password-Hashing möglich.

      Jörg Reinholz