start galerielinks impressum   suche  
galupki.de
image FotoGrafie
[Alle Beiträge vollständig in alphabetischer Reihenfolge ausgeben]
 
Arbeitsoberflaeche
Bilderstapel
EXIF Metadaten
fotodownloader
JPG Dateien Bilder nach EXIF Aufnahmedatum aus PSP heraus per Script und mithilfe Exiftool umbenennen
Sonne Mond Licht Dämmerung Blaue und Goldene Stunde
Webbasiertes Bildarchiv
Weichzeichner
[Index]   [GlossarGlossar]   [tag cloudtag cloud]   [klicken um dem Link zu folgen Links]   [Zuletzt]   [?]   [...]
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z *
(*=Joker) in
Begriff URL Bereich Text Datum

[klicken um dem Link zu folgen my galupki.de]

Arbeitsoberflaeche (folge Link Basics Bildbearbeitung PSP9)

Die Arbeitsoberfläche sollte man sich unbedingt anpassen, z.B. indem man (nur) die benötigten Symbolleisten einblendet und dort auch öfters genutzte Befehle als Symbol hinterlegt (und nicht genutzte entfernt).

Symbolleisten anpassen

Das geht mit Drag und Drop via

Die Definitionen lassen sich speichern - evtl. macht man sich mehrere Arbeitsoberflächen für verschiedene Zwecke! Speichert man die Arbeitsoberfläche, dann lässt sie sich auf dem Rechner (oder (einem anderen Rechner bzw.) nach Neuinstallation) aus dieser Datei wiederherstellen...

Speichern der Arbeitsoberfläche in eine Datei mit der Erweiterung .pspworkspace

Folgende Informationen werden gespeichert:

Gespeichert wird via Menü:

Wie gesagt - mehrere Varianten für verschiedene Zwecke sind möglich (z.B. scannen / Bildbearbeitung / ...).

Um mit einer bestimmten Arbeitsoberfläche zu starten einfach draufklicken (oder Link setzen und drauf klicken...)


können alle möglichen Speicherorte definiert oder geändert werden (z.B. weitere Pfade für Plugins aufnehmen)
Per Default landen z.B. alle eigenen "Kreationen" (z.B. Scripte) unter

''C:''/Dokumente und Einstellungen/''USERNAME''/Eigene Dateien/PSP9/... !

Bei Backups von Daten bzw. der Arbeitsoberflächen also unbedingt auch daran denken, dieses Verzeichnis (und alle Unterverzeichnisse) mitzusichern!

 
16.04.2008 21:34:07h Glossar top

Bilderstapel (folge Link php scripte)

Bilderstapel 1.0 erzeugt ein Trueimage Bild aus mehreren Bildern in Form eines... Stapels aus Fotos...

Linkdownload
LinkSource direkt ansehen

Ein Bild sagt mehr als 1000 Worte - ein on-the-fly generierter Bilderstapel aus 5 zufällig ausgewählten Bildern meiner LinkGalerie:

image

Eine Liste von Bildern wird ggf. passend verkleinert, auf Wunsch mit Rahmen versehen und - zufällig gegeneinander verdreht - aufeinander gelegt auf einem Hintergrundbild dargestellt (also in etwa, als ob jemand einen Stapel Fotos bzw. Bilder achtlos auf einem Tisch abgelegt hat)...

Nützlich z.B. zum einbauen in eine Webgalerie / Bildergalerie. Nach einer Idee von LinkMikko Koppanen... (der das ganze noch etwas ausgefeilter (Schattierung, Polaroid-Style...) mit Imagemagick vorstellt).

Das Script arbeitet mit reinen php-Mitteln (also z.B. ohne den Einsatz von Linkimagemagick realisiert). Erforderlich ist aber die - normalerweise zur Verfügung stehende - GD2-Lib!

 
29.04.2008 16:32:44h Glossar top

EXIF Metadaten (folge Link php scripte)

LinkLinks zum Thema EXIF Metadaten
Linkdownload Alle EXIF-Tags von 35 Beispielbildern der Fuji S9500 (siehe readme.txt im Archiv)

Die folgenden Scriptschnipsel in php5 zeigen analog einem kleinen Tutorial / Workshop, wie man mit wenig Aufwand alle bekannten EXIF-Daten für eigene Zwecke aus JPG-Fotos extrahiert und interpretiert, ausserdem kleine Beispiele wie man Thumbnails (z.B. für einen Cache) herausziehen / erzeugen kann.

Makernotes der Hersteller sind u.U. nicht immer ganz komplett codiert, sondern auf die Werte meiner Kameramodelle bezogen. Es lohnt also im einzelnen (wenn man denn überhaupt etwas vermisst) bei den o.a. EXIF-Links (insb. der Aufstellung von Phil, dem Autor des ExifTools) nachzusehen...

(c) 2007, Jürgen Galupki, LinkLizenzhinweise

Diesen Artikel innerhalb des Wiki-Kontextes anzeigen lassen (empfohlen).

EXIF-Daten incl. Makernotes Canon Powershot A40 / A60 / A70 und Fujifilm S9500 / S9600
mit php auslesen - fast wie im Zoombrowser oder Finepix-Viewer...
;-)

Metadaten aus Bild-Datei extrahieren (php4, php5)

Die Basics setze ich mal als bekannt voraus, daher hier nur ein paar Schnipsel. Insbesondere fehlt teils das auslesen und übertragen der standardkonformen Felder, die findet Ihr aber leicht raus, wenn Ihr $exifdata[] mal unter die Lupe nehmt (  $exifdata=@exif_read_data($bild,"",true,false); ) oder browser4exif2csv auseinandernehmt...
Folgende (nicht ganz aktuelle) Anwendungen könnt Ihr Euch komplett runterladen:

Webbasiertes Bildarchiv browser4exif2csv
Fotodownloadertool

In meiner Bildergalerie könnt Ihr z.B. mit folgenden Script dann on-the-fly Metadaten der Galerie-Bilder abfragen - und sich die Bilder, die zur Selektion passen anzeigen lassen:

https://galupki.de/galerie/search.php.

Hinweis: Je nach "Album" werden einige EXIF-Daten unterhalb der Bilder angezeigt (unterschiedlich). Rechts neben den Bildern findet man i.d.R. einen Link [Metadaten], der alle vorhandenen Daten anzeigt (nur neuere Bilder enthalten die EXIF-Daten)...

Nützliche Script-Schnipsel

Wesentliche Dateiattribute


  $result['FileName'] = $exifdata["FILE"]["FileName"];
  $result['FileSize']  = round($exifdata["FILE"]["FileSize"]/1000,0) . " KB";
  $result['FileDateTime']  = date("Ymd_His",$exifdata["FILE"]["FileDateTime"]); // last mod date als Timestamp jjjjmmtt_hhmmss
  $result['DateTimeOriginal'] = str_replace(" ", "_", str_replace(":", "", $exifdata["EXIF"]["DateTimeOriginal"])); // Aufnahmezeitpunkt als string  jjjjmmtt_hhmmss
  $result['Width'] = $exifdata['COMPUTED']['Width']; // besser: $exifdata["EXIF"]["ExifImageWidth"]
  $result['Height'] = $exifdata['COMPUTED']['Height']; // besser: $exifdata["EXIF"]["ExifImageHeight"]
// Seitenverhältnis
     if ( $result['Width'] > $result['Height'] ) {
        $ratio = round($result['Width']/$result['Height'],2);
     }  else {
        $ratio = round($result['Height']/$result['Width'],2);
     }
     if ( $ratio == 1.5  ) {
        $ratio = "3:2";
     }  elseif ( $ratio == 1.33 ) {
        $ratio = "4:3";
     }  else {
        $ratio = "1:" . $ratio;
     }
     $result['Ratio'] = $ratio;
     $result['ExifVersion'] = $exifdata["EXIF"]["ExifVersion"] / 100;
     $result['Orientation'] = $exifdata["IFD0"]["Orientation"];
     $result['CompressedBitsPerPixel'] = $exifdata["EXIF"]["CompressedBitsPerPixel"];
     $result['DigitalZoomRatio'] = $exifdata["EXIF"]["DigitalZoomRatio"];
// die tats. ZoomRatio laesst sich ggfs. auch berechnen!

Kamera, Kamerahersteller und Fotograf

      $result['Make'] = $exifdata["IFD0"]["Make"];  // Hersteller
      $result['Model'] = $exifdata["IFD0"]["Model"];  // Modell
      $result['Software'] = $exifdata["IFD0"]["Software"]; //z.B. Fuji
      $result['FirmwareVersion'] = $exifdata["MAKERNOTE"]["FirmwareVersion"]; //z.B. Canon
      $result['OwnerName'] = $exifdata["MAKERNOTE"]["OwnerName"]; //z.B. Canon, einmalig mittels Software auf Kamera zu setzen
      $result['ImageDescription'] = $exifdata["IFD0"]["ImageDescription"];

Wesentliche Bildattribute (mehr/fehlende bei den herstellerspezifischen Routinen!)

      @eval( "\$bw = " . $exifdata["EXIF"]["FocalLength"] . ";"); // Vorsicht: eval ist evil :-) -> So nur für eigene Bilder verwenden, sonst exploit-Gefahr!
      $result['FocalLength'] = $bw;

      $zn = explode("/", $exifdata["EXIF"]["ExposureTime"]);            //  in der Form "zaehler/nenner"
      if ($zn[0]!="1") {  // Anpassung kann je nach Hersteller notwendig sein
         $zn[1] = @round($zn[1] / $zn[0],0);
         $zn[0] = 1;
         $result['ExposureTime'] = implode("/", $zn);
      }

      @eval( "\$blende = " . $exifdata["EXIF"]["FNumber"] . ";");
      $result['FNumber'] = $blende;
// Belichtungskorrektur
      $result['ExposureBiasValue'] = $exifdata["EXIF"]["ExposureBiasValue"];
      $zn = explode("/", $exifdata["EXIF"]["ExposureBiasValue"]);
      if ($zn[0]=="0") {
         $result['ExposureBiasValue'] = "0";
      } elseif ( $zn[1]==100 ) {
        $result['ExposureBiasValue'] = $zn[0]/$zn[1];
      }
// EV BrightnessValue  // füllen nicht alle Hersteller, aber z.B. Fuji
      $result['BrightnessValue'] = $exifdata["EXIF"]["BrightnessValue"];

      switch ($exifdata["EXIF"]["Contrast"])  {
           case 0:  $result['Contrast'] = "Std"; break;
           case 1:  $result['Contrast'] = "Soft"; break;
           case 2:  $result['Contrast'] = "Hart"; break;
           default: $result['Contrast'] = $exifdata["EXIF"]["Contrast"]; break;
      }

      switch ($exifdata["EXIF"]["Saturation"])  {
           case 0:  $result['Saturation'] = "Std"; break;
           case 1:  $result['Saturation'] = "Soft"; break;
           case 2:  $result['Saturation'] = "Hart"; break;
           default: $result['Saturation'] = $exifdata["EXIF"]["Saturation"]; break;
      }

      $result['Sharpness'] = $exifdata["EXIF"]["Sharpness"];

      switch ($exifdata["EXIF"]["SubjectDistanceRange"])  {
           case 0:  $result['SubjectDistanceRange'] = ""; break;
           case 1:  $result['SubjectDistanceRange'] = "Makro"; break;
           case 2:  $result['SubjectDistanceRange'] = "Nah"; break;
           case 3:  $result['SubjectDistanceRange'] = "Fern"; break;
           default: $result['SubjectDistanceRange'] = $exifdata["EXIF"]["SubjectDistanceRange"]; break;
      }

Umrechnen Brennweite ins Kleinbildformat

Die Brennweite der Digitalkamera ist in den EXIF-Daten immer auf die Sensorgröße der Kamera bezogen. Zum einfachen umrechnen sollte man sich ein ARRAY definieren, in dass man für jede Kamera deren Cropfaktor einträgt (Sensorgröße bezogen auf Negativgröße Kleinbild). Mit diesem kann man dann leicht umrechnen, z.B. wie folgt:

// cropfaktoren (Verhältnis der Brennweiten) zu Kleinbildfilm je bekanntem Kameramodell
$cropfaktor35mm = array (
    "CanonPowerShotA60" => 6.474,
    "FinePixS9500"      => 4.5
);

// circle of confusion in mm bei Kleinbild (Unschärfekreis, Zerstreuungskreisdurchmesser)
$coc = 0.029;      // ergibt sich aus der Diagonale Kleinbild = 43.0 / 1500.0  =  Formatdiagonale / 1500

// berechnen Brennweite in mm, Brennweite im Vergleich zu Kleinbildformat, Zerstreuungskreisdurchmesser
@eval( "\$bw = " . $exifdata["EXIF"]["FocalLength"] . ";");  // Vorsicht: eval ist evil :-) -> So nur für eigene Bilder verwenden, sonst exploit-Gefahr!
$result['FocalLength'] = $bw;
$result['KBFocalLength_'] = @round( $bw * $cropfaktor35mm[$exifdata["IFD0"]["Model"]], 0 );
$result['KBFaktor_'] = @round( $cropfaktor35mm[$exifdata["IFD0"]["Model"]], 4);
$result['dof_ZkD']   = @round($coc / $result['KBFaktor_'],4);

Belichtungsprogramm

switch ($exifdata["EXIF"]["ExposureProgram"]) {
     case 1:  $result['ExposureProgram'] = "Manuell"; break;
     case 2:  $result['ExposureProgram'] = "Programm"; break;
     case 3:  $result['ExposureProgram'] = "Blendenautomatik Av"; break;
     case 4:  $result['ExposureProgram'] = "Zeitautomatik Tv"; break;
     case 5:  $result['ExposureProgram'] = "Kreativprogramm (slow speed)"; break;
     case 6:  $result['ExposureProgram'] = "Action (high speed)"; break;
     case 7:  $result['ExposureProgram'] = "Portrait"; break;
     case 8:  $result['ExposureProgram'] = "Landschaft"; break;
     default: $result['ExposureProgram'] = $exifdata["EXIF"]["ExposureProgram"];
}

Je nach Hersteller kann man i.d.R. über die Makernotes noch feiner unterscheiden (s.u.)...

Belichtungsmessart

      switch ($exifdata["EXIF"]["MeteringMode"]) {
           case 1: $result['MeteringMode'] = "Integral"; break;
           case 2: $result['MeteringMode'] = "Mittenbetont Integral"; break;
           case 3: $result['MeteringMode'] = "Spot"; break;
           case 4: $result['MeteringMode'] = "Multi-Spot"; break;
           case 5: $result['MeteringMode'] = "Mehrfeldmessung"; break;
           default: $result['MeteringMode'] = $exifdata["EXIF"]["MeteringMode"]; break;
      }

Blitzverwendung

      switch ($exifdata["EXIF"]["Flash"]) {
           case 0: $result['Flash'] = "Kein Blitz"; break;
           case 1: $result['Flash'] = "Blitz"; break;
           case 5: $result['Flash'] = "Blitz, reflektierter Vorblitz nicht erkannt"; break;
           case 7: $result['Flash'] = "Blitz, reflektierte Vorblitz erkannt"; break;
           case 9: $result['Flash'] = "Blitz ein"; break;
           case 13: $result['Flash'] = "Compulsory Blitz, Return light not detected"; break;
           case 15: $result['Flash'] = "Compulsory Blitz, Return light detected"; break;
           case 16: $result['Flash'] = "Kein Blitz"; break;
           case 24: $result['Flash'] = "kein Blitz"; break;
           case 25: $result['Flash'] = "Blitz, Auto Mode"; break;
           case 29: $result['Flash'] = "Blitz, Auto-Mode, Return light not detected"; break;
           case 31: $result['Flash'] = "Blitz, Auto-Mode, Return light detected"; break;
           case 32: $result['Flash'] = "kein Blitz"; break;
           case 65: $result['Flash'] = "Rote Augen Effekt"; break;
           case 69: $result['Flash'] = "Rote Augen Effekt, Return light not detected"; break;
           case 71: $result['Flash'] = "Rote Augen Effekt, Return light detected"; break;
           case 73: $result['Flash'] = "Rote Augen Leuchte, AF-Hilfslicht, Blitz"; break;
           case 77: $result['Flash'] = "Rote Augen Effekt, Compulsory Flash, Return light not detected"; break;
           case 79: $result['Flash'] = "Rote Augen Effekt, Compulsory Flash, Return light detected"; break;
           case 89: $result['Flash'] = "Rote Augen Leuchte, Blitz, Auto-Mode"; break;
           case 93: $result['Flash'] = "Rote Augen Effekt, Auto-Mode, Return light not detected"; break;
           case 95: $result['Flash'] = "Rote Augen Effekt, Auto-Mode, Return light detected"; break;
           default: $result['Flash'] = $exifdata["EXIF"]["Flash"]; break;
      }

Belichtungsmodus

      switch ($exifdata["EXIF"]["ExposureMode"]) {
           case 0: $result['ExposureMode'] = "Auto"; break;
           case 1: $result['ExposureMode'] = "Manuell"; break;
           case 2: $result['ExposureMode'] = "Autobracketing"; break;
           default: $result['ExposureMode'] = $exifdata["EXIF"]["ExposureMode"]; break;
      }

Weissabgleich

      switch ($exifdata["EXIF"]["WhiteBalance"]) {
           case 0: $result['WhiteBalance'] = "Auto"; break;
           default: $result['WhiteBalance'] = $exifdata["EXIF"]["WhiteBalance"]; break;
      }

sowie

      $result['LightSource'] = $exifdata["EXIF"]["LightSource"];
      switch ($exifdata["EXIF"]["LightSource"]) {
           case 0: $result['LightSource'] = "Auto / unknown"; break;
           case 1: $result['LightSource'] = "Tageslicht"; break;
           case 2: $result['LightSource'] = "Fluorescent"; break;
           case 3: $result['LightSource'] = "Tungsten"; break;
           case 10: $result['LightSource'] = "Blitz"; break;
           default: $result['LightSource'] = $exifdata["EXIF"]["LightSource"]; break;
      }

ISO-Empfindlichkeit

      $result['ISO'] = $exifdata["EXIF"]["ISOSpeedRatings"];

Je nach Hersteller siehe Makernotes...

JPG-Components-Configuration

      $result['ComponentsConfiguration'] = bin2hex($exifdata["EXIF"]["ComponentsConfiguration"]);
      $result['ComponentsConfiguration']    = str_replace("01","Y",$result['ComponentsConfiguration']);
      $result['ComponentsConfiguration']    = str_replace("02","Cb",$result['ComponentsConfiguration']);
      $result['ComponentsConfiguration']    = str_replace("03","Cr",$result['ComponentsConfiguration']);
      $result['ComponentsConfiguration']    = str_replace("04","R",$result['ComponentsConfiguration']);
      $result['ComponentsConfiguration']    = str_replace("05","G",$result['ComponentsConfiguration']);
      $result['ComponentsConfiguration']    = str_replace("06","B",$result['ComponentsConfiguration']);
      $result['ComponentsConfiguration']    = str_replace("00","",$result['ComponentsConfiguration']);

Farbraum

      switch ($exifdata["EXIF"]["ColorSpace"]) {
           case 1: $result['ColorSpace'] = "sRGB"; break;
           case 2: $result['ColorSpace'] = "Adobe RGB"; break;
           case 65535: $result['ColorSpace'] = "uncalibrated"; break;
           default: $result['ColorSpace'] = $exifdata["EXIF"]["ColorSpace"]; break;
      }

Sensortyp

      switch ($exifdata["EXIF"]["SensingMethod"]) {
           case 1: $result['SensingMethod'] = "not defined"; break;
           case 2: $result['SensingMethod'] = "One Chip Color Area Sensor"; break;
           case 3: $result['SensingMethod'] = "Two Chip Color Area Sensor"; break;
           case 4: $result['SensingMethod'] = "Three Chip Color Area Sensor"; break;
           case 5: $result['SensingMethod'] = "Color Sequential Area Sensor"; break;
           case 7: $result['SensingMethod'] = "Trilinear Sensor"; break;
           case 8: $result['SensingMethod'] = "Color Sequential Linear Sensor"; break;
           default: $result['SensingMethod'] = $exifdata["EXIF"]["SensingMethod"]; break;
      }

Gimmick: EV berechnen

// gimmick: EV berechnen
//(nicht bei jedem Hersteller stehen die notwendigen Daten bereit!)
// $result[...] muss hier schon vorher via $exifdata[...] vorbelegt werden!

Begriffserklärung EV


// BV = $result['BrightnessValue'] =
      @eval( "\$bv = " . $result['BrightnessValue'] . ";");    // think twice: eval is evil... Exploit-Gefahr bei fremden Bildern!
      $result['ev_BV'] = $bv;

// SV = log2(0,32*ISO)
      $result['ev_SV'] = log( 0.32*$result['ISO'], 2);

      if (is_numeric($result['ev_BV']) AND is_numeric($result['ev_SV'])) {
//       EV = SV+BV
         $result['ev_EV'] = "EV".round( $result['ev_SV'] + $result['ev_BV'] );           // gerundet!
      }  else {
         $result['ev_EV'] = "";
      }

Gimmick: Schärfentiefe (Tiefenschärfe) passend zum Bild berechnen

//(nicht bei jedem Hersteller stehen die notwendigen Daten (fokussierte Entferung) bereit!)
//man kann die theoretische Sensor-Diagonale berechnen (43 / cropfaktorKB)
//Blende hat man auch, ebenso wie den Zerstreuungskreisdurchmesser (0,029 / cropfaktorKB)
//...in den Metadaten zu Canon-Bildern meiner Galerie mache ich das z.B. (siehe [Metadaten]...)
Ich glaube, in browser4exif2csv (s.o.) ist das schon codiert, sonst machts halt selber ;-)

Vorschaubild aus *.JPG extrahieren oder erzeugen falls nicht vorhanden

Sinnvollerweise sollte man vielleicht noch anhand des Last Modification Dates der Bilddatei und des Thumbnails prüfen+entscheiden, das Thumbnail ggfs. neu anzulegen! Ansonsten extrahiert die nachfolgende Funktion ein bestehendes Thumbnail aus einer Bilddatei oder erzeugt ein Thumbnail aus dem Bild selbst (wenn kein Thumb enthalten ist).
 
Die Thumbnails speichere ich in meiner Galerie in Dateiform ab, so dass sie normalerweise nur einmal auf dem Webserver extrahiert/erzeugt werden müssen (Cache).

$vbg = 160; // Größe Thumbnail

function exif_extrakt_vorschaubild
($bild, $vorschau_name) {
// --- extrahiert ein JPG Vorschaubild  ---------------

global $vbg;

 
  if ( !file_exists ($vorschau_name) ) {
     $vorschau=@exif_thumbnail($bild, $width, $height, $type);

     if ( $vorschau==true
          AND max($width,$height)==$vbg
          AND ( substr(image_type_to_mime_type($type),6)=="jpeg"
                OR substr(image_type_to_mime_type($type),6)=="jpg" ) ) {
        $file=fopen($vorschau_name,"wb");
        fwrite($file,$vorschau);
        fclose($file);
        unset($vorschau);
     }  else { // es existiert gar kein Vorschaubild in der Datei
        create_vorschaubild($bild, $vorschau_name);
     }
  }


} // end function exif_extrakt_vorschaubild



function create_vorschaubild($bild, $vorschau_name) {
// --- legt ein Vorschaubild aus originaldatei neu mittels GD2-Lib an ----------


global $vbg;

// Vorschaubilder-Größe (width=...)

  if ( !file_exists ($vorschau_name) ) {

// Originalbild
      $neujpg = imagecreatefromjpeg ($bild);
      $jpg_breite = imagesx ($neujpg);
      $jpg_hoehe  = imagesy ($neujpg);

// Hochformat statt Querformat
      if ($jpg_hoehe > $jpg_breite ) {
         $vbg = $jpg_breite * $vbg / $jpg_hoehe;
      }

// Vorschaubild
      if ( $jpg_breite > $vbg ) {
         $x = $vbg;
         $y = $jpg_hoehe * $vbg / $jpg_breite;
      }  else {
         $x = $jpg_breite;
         $y = $jpg_hoehe;
      }
      $kleinesjpg = imagecreatetruecolor ( $x, $y);
//    $dummy = imagecopyresized   ( $kleinesjpg, $neujpg, 0, 0, 0, 0, $vbg, $y, $jpg_breite, $jpg_hoehe);  // qualitaet wird sehr mies, also besser:
      $dummy = imagecopyresampled ( $kleinesjpg, $neujpg, 0, 0, 0, 0, $vbg, $y, $jpg_breite, $jpg_hoehe);  // qualitaet gut aber laufzeit SEHR (eigentlich viel zu) gross
// Qualitaet 50% ist noch nicht gut, file wird aber schon ziemlich gross...
      imagejpeg ($kleinesjpg, $vorschau_name, 70);
  }

} // end function exif_extrakt_vorschaubild

Bild mittels php-Script ausgeben

function showpic ($image) {

// --- gibt http-Header aus
    header("Content-type: image/jpg");
    header("Content-Type: image/jpeg");
//  header("expires content=0");
//  header("Cache-Control: no-cache, must-revalidate");
//  header("Pragma: no-cache");

// Bild mit php ausgeben -----------------------------------------------------------------------------------
    $image = @fopen ($image, "rb");
    @fpassthru ($image);
    @fclose ($image);

} // end function showpic

Fujifilm Makernotes

Alles was hier nicht explizit aufgeführt ist (z.B. ISO, Blende, Zeit usw.) ist in normalen standardkonformen Tags hinterlegt!

/*
 aus  browser4exif2csv 1.1a vom 26.04.2006

  Autor/Kontakt: Jürgen Galupki
  Lizenz:  https://galupki.de/kontakt/readme-kontakt-lizenz.html
  Kontakt: https://galupki.de/kontakt/
  WWW:     https://galupki.de        
*/


function fuji_data() {
// wird automatisch von exif_data ausgeführt!

/*
        Grundlage war mal:
        Fuji Maker Notes, Quelle:

        Exifer 1.5
        by Jake Olefsky
        http://www.offsky.com/software/exif/index.php
        jake@olefsky.com
        This software is free to use and modify for non-commercial purposes only.  For commercial use
        of this software please contact me.

        ergänzt/modifiziert für S9500 nach Testaufnahmen...
        Juergen Galupki
        https://galupki.de

        STAND: 26.04.2006

        nicht herausbekommen:

*/


global $exifdata; // input
global $result;   // output


   if ( $result['Make'] != "FUJIFILM" ) {
      return;
   }

// **********************************************************************************************************

                        $result['Macro']= $exifdata["MAKERNOTE"]["Macro"];
                                if ($result['Macro']==1) {
                                   $result['Macro'] = "Makro";
                                }  elseif ($result['Macro']==0) {
                                   $result['Macro'] = "";
                                }  else {
                                   $result['Macro'] = $exifdata["MAKERNOTE"]["Macro"];
                                }


//                        $result['SelfTimer']= $exifdata["MAKERNOTE"]["ModeArray"][2];

                        $result['Quality']= $exifdata["MAKERNOTE"]["Quality"];

      $result['FlashStrength_Maker'] = $exifdata["MAKERNOTE"]["FlashStrength"];
      $zn = explode("/", $exifdata["MAKERNOTE"]["FlashStrength"]);
      if ($zn[0]=="0") {
         $result['FlashStrength_Maker'] = "";
      } elseif ( $zn[1]==100 ) {
        $result['FlashStrength_Maker'] = $zn[0]/$zn[1];
      }


                        $result['Flash_Maker']= $exifdata["MAKERNOTE"]["FlashMode"];
                                if($result['Flash_Maker']==0)  $result['Flash_Maker'] = "Auto";
                                if($result['Flash_Maker']==1)  $result['Flash_Maker'] = "Ein";
                                if($result['Flash_Maker']==2)  $result['Flash_Maker'] = "Aus";
                                if($result['Flash_Maker']==3)  $result['Flash_Maker'] = "Rote Augen";
                                if($result['Flash_Maker']==4)  $result['Flash_Maker'] = "Externer Blitz";

//                        $result['DriveMode']= $exifdata["MAKERNOTE"]["ModeArray"][5];

                        $result['FocusMode']= $exifdata["MAKERNOTE"]["FocusMode"];
                                if($result['FocusMode']==0) $result['FocusMode'] = "Autofocus";
                                if($result['FocusMode']==1) $result['FocusMode'] = "Manual Focus";


                        $result['ExposureMode_']=$exifdata["MAKERNOTE"]["PictureMode"];
                                if($result['ExposureMode_']==0)  $result['ExposureMode_']   = "Automode";
                                if($result['ExposureMode_']==1)  $result['ExposureMode_']   = "Portrait";
                                if($result['ExposureMode_']==2)  $result['ExposureMode_']   = "Landschaft";
                                if($result['ExposureMode_']==4)  $result['ExposureMode_']   = "Sport";
                                if($result['ExposureMode_']==5)  $result['ExposureMode_']   = "Langzeit";
                                if($result['ExposureMode_']==7)  $result['ExposureMode_']   = "Nacht";
                                if($result['ExposureMode_']==6)  $result['ExposureMode_']   = "Programmshift";
                                if($result['ExposureMode_']==8)  $result['ExposureMode_']   = "Action";
                                if($result['ExposureMode_']==256)  $result['ExposureMode_'] = "Blendenautomatik Av";
                                if($result['ExposureMode_']==512)  $result['ExposureMode_'] = "Zeitautomatik Tv";
                                if($result['ExposureMode_']==768)  $result['ExposureMode_'] = "Manuell";


                        $result['Saturation_Color']=$exifdata["MAKERNOTE"]["Color"];
                                if($result['Saturation_Color']==0) $result['Saturation_Color']   = "Chroma Saturation Normal";
                                if($result['Saturation_Color']==256) $result['Saturation_Color'] = "Chroma Saturation High";
                                if($result['Saturation_Color']==768) $result['Saturation_Color'] = "Graustufen";


                        $result['Sharpness']=$exifdata["MAKERNOTE"]["Sharpness"];
                                if($result['Sharpness']==1) $result['Sharpness'] = "Soft+";
                                if($result['Sharpness']==2) $result['Sharpness'] = "Soft";
                                if($result['Sharpness']==3) $result['Sharpness'] = "Std";
                                if($result['Sharpness']==4) $result['Sharpness'] = "Hart";
                                if($result['Sharpness']==5) $result['Sharpness'] = "Hart+";


                        if ($result['FocalUnits']>0) {
                           $result['LongFocalLength']  = $result['LongFocalLength'] / $result['FocalUnits'];
                           $result['ShortFocalLength'] = $result['ShortFocalLength'] / $result['FocalUnits'];
                           $result['OpticalZoomRatio_'] = round($result['FocalLength'] / $result['ShortFocalLength'],2);
                           $result['ZoomRatio_'] = $result['OpticalZoomRatio_'];
                        }


                        $result['WhiteBalance_Maker']= $exifdata["MAKERNOTE"]["WhiteBalance"];
                                if($result['WhiteBalance_Maker']==0)  $result['WhiteBalance_Maker']    = "Auto";
                                if($result['WhiteBalance_Maker']==256)  $result['WhiteBalance_Maker']  = "Tageslicht";
                                if($result['WhiteBalance_Maker']==512)  $result['WhiteBalance_Maker']  = "Bewoelkt";
                                if($result['WhiteBalance_Maker']==768)  $result['WhiteBalance_Maker']  = "Neonlicht1";
                                if($result['WhiteBalance_Maker']==769)  $result['WhiteBalance_Maker']  = "DaywhiteColor-fluorescence";
                                if($result['WhiteBalance_Maker']==770) $result['WhiteBalance_Maker']   = "White-fluorescence";
                                if($result['WhiteBalance_Maker']==1024)  $result['WhiteBalance_Maker'] = "Incandenscense";
                                if($result['WhiteBalance_Maker']==3840)  $result['WhiteBalance_Maker'] = "Custom";


                        $result['Flash_SlowSync'] = $exifdata["MAKERNOTE"]["SlowSync"];
                        if ($result['Flash_SlowSync']==0) {
                           $result['Flash_SlowSync'] = "";
                        } elseif ($result['Flash_SlowSync']==1) {
                           $result['Flash_SlowSync'] = "SlowSync";
                        }  else {
                        }

                        $result['ContTake'] = $exifdata["MAKERNOTE"]["ContTake"];
                        if ($result['ContTake']==0) {
                           $result['ContTake'] = "";
                        } elseif ($result['ContTake']==1) {
                           $result['ContTake'] = "Serienbild/Bracketing";
                        }  else {
                        }

                        $result['BlurWarning'] = $exifdata["MAKERNOTE"]["BlurWarning"];
                        if ($result['BlurWarning']==0) {
                           $result['BlurWarning'] = "";
                        } elseif ($result['BlurWarning']==1) {
                           $result['BlurWarning'] = "Verwacklungswarnung";
                        }  else {
                        }

                        $result['FocusWarning'] = $exifdata["MAKERNOTE"]["FocusWarning"];
                        if ($result['FocusWarning']==0) {
                           $result['FocusWarning'] = "";
                        } elseif ($result['FocusWarning']==1) {
                           $result['FocusWarning'] = "Out of focus";
                        }  else {
                        }

                        $result['AEWarning'] = $exifdata["MAKERNOTE"]["AEWarning"];
                        if ($result['AEWarning']==0) {
                           $result['AEWarning'] = "";
                        } elseif ($result['AEWarning']==1) {
                           $result['AEWarning'] = "Überbelichtet";
                        }  else {
                        }


} // end function fuji maker notes

Canon Makernotes

/*
  browser4exif2csv 1.03a vom 19.09.2003

  Autor/Kontakt: Jürgen Galupki
  Lizenz:  https://galupki.de/kontakt/readme-kontakt-lizenz.html
  Kontakt: https://galupki.de/kontakt/
  WWW:     https://galupki.de     
*/


function canon_data() {
// wird automatisch von exif_data ausgeführt!

/*
        Grundlage war mal:
        Canon Maker Notes, Quelle:

        Exifer 1.3
        by Jake Olefsky
        http://www.offsky.com/software/exif/index.php
        jake@olefsky.com
        This software is free to use and modify for non-commercial purposes only.  For commercial use
        of this software please contact me.

        ergänzt/modifiziert für A60/A70 / Exif 2.2 nach Testaufnahmen...
        Juergen Galupki
        https://galupki.de

        STAND: 28-08/2003

        nicht herausbekommen:
        - einige Werte die mit ? gekennzeichnet sind
        - AiAF (welches Fokusfeld wird verwendet)
*/


global $exifdata; // input
global $result;   // output


   if ( $result['Make'] != "Canon" ) {
      return;
   }


// **********************************************************************************************************

                        $result['BytesModeArray']= $exifdata["MAKERNOTE"]["ModeArray"][0] / 2 - 1;

                        $result['Macro']= $exifdata["MAKERNOTE"]["ModeArray"][1];
                                if($result['Macro']==1) $result['Macro'] = "Makro";
                                if($result['Macro']==2) $result['Macro'] = "";

                        $result['SelfTimer']= $exifdata["MAKERNOTE"]["ModeArray"][2];
                                if($result['SelfTimer']==0) $result['SelfTimer'] = "";
                                else $result['SelfTimer']= "Selbstauslöser " . $result['SelfTimer']/10 . "s";

                        $result['Quality']= $exifdata["MAKERNOTE"]["ModeArray"][3];
                                if($result['Quality']==2) $result['Quality'] = "Normal";
                                if($result['Quality']==3) $result['Quality'] = "FINE";
                                if($result['Quality']==5) $result['Quality'] = "Superfein";

                        $result['Flash_Maker']= $exifdata["MAKERNOTE"]["ModeArray"][4];
                                if($result['Flash_Maker']==0)  $result['Flash_Maker'] = "Aus";
                                if($result['Flash_Maker']==1)  $result['Flash_Maker'] = "Auto";
                                if($result['Flash_Maker']==2)  $result['Flash_Maker'] = "Ein";
                                if($result['Flash_Maker']==3)  $result['Flash_Maker'] = "Rote Augen";
                                if($result['Flash_Maker']==4)  $result['Flash_Maker'] = "slow synchro";
                                if($result['Flash_Maker']==5)  $result['Flash_Maker'] = "Auto, Rote Augen";
                                if($result['Flash_Maker']==6)  $result['Flash_Maker'] = "Ein, Rote Augen";
                                if($result['Flash_Maker']==16) $result['Flash_Maker'] = "Externer Blitz";

                        $result['DriveMode']= $exifdata["MAKERNOTE"]["ModeArray"][5];
                                if($result['DriveMode']==0) $result['DriveMode'] = "Einzelbild";
                                if($result['DriveMode']==1) $result['DriveMode'] = "Serienbild";

                        $result['FocusMode']= $exifdata["MAKERNOTE"]["ModeArray"][7];
                                if($result['FocusMode']==0) $result['FocusMode'] = "One-Shot";
                                if($result['FocusMode']==1) $result['FocusMode'] = "AI Servo";
                                if($result['FocusMode']==2) $result['FocusMode'] = "AI Focus";
                                if($result['FocusMode']==3) $result['FocusMode'] = "MF";
                                if($result['FocusMode']==4) $result['FocusMode'] = "Single";
                                if($result['FocusMode']==5) $result['FocusMode'] = "Continous";
                                if($result['FocusMode']==6) $result['FocusMode'] = "MF";


                        $result['ImageSize']=$exifdata["MAKERNOTE"]["ModeArray"][10];
                                if($result['ImageSize']==0) $result['ImageSize'] = "Large";
                                if($result['ImageSize']==1) $result['ImageSize'] = "Medium";
                                if($result['ImageSize']==2) $result['ImageSize'] = "Small";

                        $result['ExposureMode_']=$exifdata["MAKERNOTE"]["ModeArray"][11];
                                if($result['ExposureMode_']==0)  $result['ExposureMode_'] = "Automode";
                                if($result['ExposureMode_']==1)  $result['ExposureMode_'] = "Manuell";
                                if($result['ExposureMode_']==2)  $result['ExposureMode_'] = "Landschaft";
                                if($result['ExposureMode_']==3)  $result['ExposureMode_'] = "Schnelle Verschlusszeiten";
                                if($result['ExposureMode_']==4)  $result['ExposureMode_'] = "Langsame Verschlusszeiten";
                                if($result['ExposureMode_']==5)  $result['ExposureMode_'] = "Nacht";
                                if($result['ExposureMode_']==6)  $result['ExposureMode_'] = "Schwarzweiss";
                                if($result['ExposureMode_']==7)  $result['ExposureMode_'] = "Sepia";
                                if($result['ExposureMode_']==8)  $result['ExposureMode_'] = "Portrait";
                                if($result['ExposureMode_']==9)  $result['ExposureMode_'] = "Sport";
                                if($result['ExposureMode_']==10) $result['ExposureMode_'] = "Makro/Close-Up";
                                if($result['ExposureMode_']==11) $result['ExposureMode_'] = "Pan Focus";

                        $result['DigitalZoom']=$exifdata["MAKERNOTE"]["ModeArray"][12];
                                if($result['DigitalZoom']==0) $result['DigitalZoom'] = "";
                                if($result['DigitalZoom']==1) $result['DigitalZoom'] = "2x";
                                if($result['DigitalZoom']==2) $result['DigitalZoom'] = "4x";
                                if($result['DigitalZoom']==3) $result['DigitalZoom'] = "Digitalzoom";

                        $result['Contrast']=$exifdata["MAKERNOTE"]["ModeArray"][13];
                                if($result['Contrast']==0) $result['Contrast'] = "Normal";
                                if($result['Contrast']==1) $result['Contrast'] = "Hoch";

                        $result['Saturation']=$exifdata["MAKERNOTE"]["ModeArray"][14];
                                if($result['Saturation']==0) $result['Saturation'] = "Normal";
                                if($result['Saturation']==1) $result['Saturation'] = "Hoch";

                        $result['Sharpness']=$exifdata["MAKERNOTE"]["ModeArray"][15];
                                if($result['Sharpness']==0) $result['Sharpness'] = "Normal";
                                if($result['Sharpness']==1) $result['Sharpness'] = "Hoch";

                        $result['ISO']=$exifdata["MAKERNOTE"]["ModeArray"][16];
                                if($result['ISO']==15) $result['ISO'] = "Auto";
                                if($result['ISO']==16) $result['ISO'] = "50";
                                if($result['ISO']==17) $result['ISO'] = "100";
                                if($result['ISO']==18) $result['ISO'] = "200";
                                if($result['ISO']==19) $result['ISO'] = "400";

                        $result['MeteringMode_Canon']=$exifdata["MAKERNOTE"]["ModeArray"][17];
                                if($result['MeteringMode_Canon']==3) $result['MeteringMode_Canon'] = "Mehrfeldmessung";
                                if($result['MeteringMode_Canon']==4) $result['MeteringMode_Canon'] = "Spot";
                                if($result['MeteringMode_Canon']==5) $result['MeteringMode_Canon'] = "Mittenbetont Integral";

                        $result['FocusType']=$exifdata["MAKERNOTE"]["ModeArray"][18];
                                if($result['FocusType']==0) $result['FocusType'] = "MF";
                                if($result['FocusType']==1) $result['FocusType'] = "Auto";
                                if($result['FocusType']==3) $result['FocusType'] = "Makro";
                                if($result['FocusType']==8) $result['FocusType'] = "Locked (Panorama)";

                        $result['AFPointSelected']=$exifdata["MAKERNOTE"]["ModeArray"][19];
                                if($result['AFPointSelected']==0x2005) $result['AFPointSelected'] = "Zentral";
                                if($result['AFPointSelected']==0x3000) $result['AFPointSelected'] = "MF";
                                if($result['AFPointSelected']==0x3001) $result['AFPointSelected'] = "Auto";
                                if($result['AFPointSelected']==0x3002) $result['AFPointSelected'] = "Rechts";
                                if($result['AFPointSelected']==0x3003) $result['AFPointSelected'] = "Mitte";
                                if($result['AFPointSelected']==0x3004) $result['AFPointSelected'] = "Links";
                                if($result['AFPointSelected']==0x4001) $result['AFPointSelected'] = "AiAF";

                        $result['ExposureMode_Canon']=$exifdata["MAKERNOTE"]["ModeArray"][20];
                                if($result['ExposureMode_Canon']==0) $result['ExposureMode_Canon'] = "EasyShoot";
                                if($result['ExposureMode_Canon']==1) $result['ExposureMode_Canon'] = "Programm";
                                if($result['ExposureMode_Canon']==2) $result['ExposureMode_Canon'] = "Zeitautomatik Tv";
                                if($result['ExposureMode_Canon']==3) $result['ExposureMode_Canon'] = "Blendenautomatik Av";
                                if($result['ExposureMode_Canon']==4) $result['ExposureMode_Canon'] = "Manuell";
                                if($result['ExposureMode_Canon']==5) $result['ExposureMode_Canon'] = "Auto-DEP";

                        $result['LongFocalLength']=$exifdata["MAKERNOTE"]["ModeArray"][23];
                        $result['ShortFocalLength']=$exifdata["MAKERNOTE"]["ModeArray"][24];
                        $result['FocalUnits']=$exifdata["MAKERNOTE"]["ModeArray"][25];
                        if ($result['FocalUnits']>0) {
                           $result['LongFocalLength']  = $result['LongFocalLength'] / $result['FocalUnits'];
                           $result['ShortFocalLength'] = $result['ShortFocalLength'] / $result['FocalUnits'];
                           $result['OpticalZoomRatio_'] = round($result['FocalLength'] / $result['ShortFocalLength'],2);
                           $result['ZoomRatio_'] = $result['OpticalZoomRatio_'];
                        }

                        $result['FlashActivity']=$exifdata["MAKERNOTE"]["ModeArray"][28];
                           if($result['FlashActivity']==0) $result['FlashActivity'] = "Flash not fired";
                           if($result['FlashActivity']==1) $result['FlashActivity'] = "Flash fired";

                        $result['FlashDetails']=$exifdata["MAKERNOTE"]["ModeArray"][29];
                           if($result['FlashDetails']==0) $result['FlashDetails'] = "";
                           if($result['FlashDetails'] & pow(2,14) ) $result['FlashDetails'] = "Externer E-TTL";
                           if($result['FlashDetails'] & pow(2,13) ) $result['FlashDetails'] = "Interner Blitz";
                           if($result['FlashDetails'] & pow(2,11) ) $result['FlashDetails'] = "FP Synck used";
                           if($result['FlashDetails'] & pow(2,7)  ) $result['FlashDetails'] = "Synck Zweiter Verschlussvorhang";
                           if($result['FlashDetails'] & pow(2,4)  ) $result['FlashDetails'] = "FP Synck enabled";

                        $result['FocusMode_']= $exifdata["MAKERNOTE"]["ModeArray"][32];
                                if($result['FocusMode_']==0) $result['FocusMode_'] = "Single";
                                if($result['FocusMode_']==1) $result['FocusMode_'] = "Continous";

                        $result['DigitalZoomRatio_N']= $exifdata["MAKERNOTE"]["ModeArray"][36];
                        $result['DigitalZoomRatio_Z']= $exifdata["MAKERNOTE"]["ModeArray"][37];
                                if($result['DigitalZoomRatio_N']!=$result['DigitalZoomRatio_Z']) {
                                   $result['DigitalZoomRatio_'] = round($result['DigitalZoomRatio_Z'] / $result['DigitalZoomRatio_N'],2);
                                   $result['ZoomRatio_'] = $result['OpticalZoomRatio_'] * $result['DigitalZoomRatio_'];
                                }  else {
                                   $result['DigitalZoomRatio_'] = 1;
                                }

                        $result['PhotoEffect'] = $exifdata["MAKERNOTE"]["ModeArray"][40];
                                if($result['PhotoEffect']==0) $result['PhotoEffect'] = "";
                                if($result['PhotoEffect']==1) $result['PhotoEffect'] = "Kräftig";
                                if($result['PhotoEffect']==2) $result['PhotoEffect'] = "Neutral";
                                if($result['PhotoEffect']==3) $result['PhotoEffect'] = "Gering schärfen";
                                if($result['PhotoEffect']==4) $result['PhotoEffect'] = "Sepia";
                                if($result['PhotoEffect']==5) $result['PhotoEffect'] = "Schwarzweiss";

// **********************************************************************************************************

                        $result['BytesImageInfo']= $exifdata["MAKERNOTE"]["ImageInfo"][0] / 2 - 1;

//                        $result['?2-03']= $exifdata["MAKERNOTE"]["ImageInfo"][3];
//                        $result['?2-05']= $exifdata["MAKERNOTE"]["ImageInfo"][5];

                        $result['WhiteBalance_Maker']= $exifdata["MAKERNOTE"]["ImageInfo"][7];
                                if($result['WhiteBalance_Maker']==0)  $result['WhiteBalance_Maker'] = "Auto";
                                if($result['WhiteBalance_Maker']==1)  $result['WhiteBalance_Maker'] = "Tageslicht";
                                if($result['WhiteBalance_Maker']==2)  $result['WhiteBalance_Maker'] = "Wolkig";
                                if($result['WhiteBalance_Maker']==3)  $result['WhiteBalance_Maker'] = "Kunstlicht";
                                if($result['WhiteBalance_Maker']==4)  $result['WhiteBalance_Maker'] = "Leuchtstoff";
                                if($result['WhiteBalance_Maker']==14) $result['WhiteBalance_Maker'] = "Leuchtstoff H";
                                if($result['WhiteBalance_Maker']==5)  $result['WhiteBalance_Maker'] = "Blitzlicht";
                                if($result['WhiteBalance_Maker']==6)  $result['WhiteBalance_Maker'] = "Manuell";
                                if($result['WhiteBalance_Maker']==65535) $result['WhiteBalance_Maker'] = "Sepia / s/w";

                        $result['SequenceNumber']= $exifdata["MAKERNOTE"]["ImageInfo"][9];

                        $result['AFPointUsed']= $exifdata["MAKERNOTE"]["ImageInfo"][14];

/*
Only set in One-Shot mode?
If none used, AF failed or manual focus was used (e.g. on a lens with full-time manual focus)
Bits 15..0:
15-12: number of available focus points
2: left
1: center
0: right
*/

                        $result['FlashBias']= $exifdata["MAKERNOTE"]["ImageInfo"][15];

                        $result['SubjectDistance']= $exifdata["MAKERNOTE"]["ImageInfo"][19]/100 . "m";
                                if($result['SubjectDistance']=="0m") $result['SubjectDistance']="";
                                if($result['SubjectDistance']>"65") $result['SubjectDistance']="unendlich";

//                        $result['?2-19']= $exifdata["MAKERNOTE"]["ImageInfo"][19];
//                        $result['?2-22']= $exifdata["MAKERNOTE"]["ImageInfo"][22];


} // end function canon maker notes


 
29.04.2008 16:32:44h Glossar top

fotodownloader (folge Link php scripte)

Linkdownload foto downloader 1.1 beta (php)

Der foto downloader kopiert die auf einer Speicherkarte (oder Verzeichnis einer Festplatte oder eines Netzlaufwerks) vorhandenen Daten (Quellverzeichnis) (in datumsorientierte Unterverzeichnisse) in ein anzugebendes Zielverzeichnis (auf demselben / einem anderen Laufwerk) - also nach Jahr/Monat -> .../jjjj/mm/jjjjmmtt_hhmmss-originalname.jpg einsortiert

Dabei werden alle Unterverzeichnisse (bezogen auf das angegebene Quellverzeichnis) rekursiv durchsucht - wahlweise kann man aber auch ''manuell'' sequentiell durch die Quell-Verzeichnisstruktur navigieren.

Es wird automatisch eine passende datumsorientierte LinkUnterverzeichnisstruktur angelegt (bzw. ergänzt), und die übertragenen Dateien werden passend (aufgrund der EXIF-Aufnahmezeit) umbenannt (exif rename Funktion. Prinzipiell kann man diese Struktur auch nach beliebigen anderen EXIF-Tags geordnet aufbauen).

Beispiel: 
Ein Bild namens IMG0001.jpg, aufgenommen am 19.02.2007 um 11:11 Uhr 
würde wie folgt kopiert: 
''laufwerk:''/''zielverzeichnis''/2007/02/20070219_111100-IMG0001.jpg

Bonbons:
Prinzipiell lässt sich foto downloader auch dazu benutzen, eine vorhandene Verzeichnisstruktur (mit beliebig gegliederten Unterverzeichnissen) auf der Harddisk passend umzukopieren

(Sinnvolle Voraussetzungen hierfür: Dateien sollten EXIF-Daten enthalten - bzw. die Dateien sollten sinnvolle Zeitstempel (Erstellungsdatum / Datum letzte Modifikation) - z.B. für das umkopieren/archivieren von Logdateien) enthalten - gedacht ist es aber hauptsächlich zum ''download'' der Fotos (Filme, Sound-Begleitdateien, ...) von Speicherkarten im Leser, oder direkt von der als USB-Mass-Storage angeschlossenen Kamera auf die Festplatte.

foto downloader kennt einige gängige herstellerspezifische Verzeichnisstrukturen und Datei-Benennungsschemata (Canon, Fujifilm, Panasonic, und generell den zumeist zugrunde liegenden LinkDCF Standard), so dass zusammengehörige Dateien (z.B. WAV-Dateien zu Bildern, separieren von Panorama-Teil-Bildern oder Videos in ein eigenes Unterverzeichnis u.a.) auch passend benannt - bzw. überflüssige Dateien (z.B. Canon-DPOF-Einstellungen) ignoriert werden.

Ein Protokoll (Datum und Zeit kopieren, Quellname, Zielname, Kameramodell/Hersteller) der kopierten Dateien findet man anschliessend im Zielverzeichnis...

Webserver

Auf dem Bildbearbeitungsrechner muß ein lokaler Webserver laufen, z.B. eine Distribution wie XAMPP, der Abyss Webserver plus php - oder z.B. eine LinkServer2Go-Distribution (die läuft auch von einer CD/DVD/USB-Stick!)

Praktische Hinweise

In der beta-Version wird der Fortschritt in Form einer HTML-Tabelle aufgebaut. Der Microsoft IE zeigt diese Tabelle erst an, wenn das Quellverzeichnis komplett abgearbeitet ist (was je nach Datenumfang ja recht lange dauern kann!). Es ist also empfehlenswert, die Ausgabe nicht in Tabellenform vorzunehmen (muss man im Script dann ändern) oder z.B. mit dem Firefox auszuführen (der die Ausgabe entsprechend dem Bearbeitungsfortschritt laufend anzeigt) oder (...).

Besonderheiten / Konfiguration Server2Go

Server2Go-Installation z.B. muss leicht ergänzt/geändert werden (in der php.ini müssen die Module exif, gd2 und mbstring aktiviert werden - mbstring muss ''vor'' exif aufgeführt sein!).

Achtung

 
04.01.2010 21:09:33h Glossar top

JPG Dateien Bilder nach EXIF Aufnahmedatum aus PSP heraus per Script und mithilfe Exiftool umbenennen (folge Link Basics Bildbearbeitung PSP9)

Linkdownload
LinkInstallationsbeschreibung

Achtung: Zusätzlich braucht man das Exiftool von Phil Harvey (siehe unten bzw. Installationsbeschreibung)!

Automatisiertes umbenennen bzw. einsortieren neuer Bilder anhand Exif-Aufnahmezeitpunkt (Datum / Uhrzeit) in eine Verzeichnisstruktur direkt aus Paint Shop Pro heraus

Das ZIP-Archiv enthält Scripte, um direkt aus Paint Shop Pro heraus Bilder nach enthaltenen EXIF Aufnahmedatum (und Uhrzeit) umzubenennen und direkt passend in eine Verzeichnisstruktur zu verschieben. Es ist ein weiteres Tool (von Phil Harvey) notwendig (siehe unten).



image

Die Bilder sollten jetzt aus dem Verzeichnis verschwunden sein, stattdessen stehen sie jetzt passend einsortiert im Verzeichnisbaum unterhalb des angegebenen Wurzelverzeichnisses, z.B. eine Aufnahme vom 31.03.2008, um 18:55:02 aufgenommen würde verschoben zu:

d:/pic/2008/03/20080331_185502-DCF00001.jpg
Generell also wird ein Bild wie folgt umbenannt:


  jjjj   -> Kalenderjahr
  mm     -> Monat
  tt     -> Tag
  hhmmss -> Uhrzeit
Unterverzeichnisse (.../jjjj/mm/...) werden bei Bedarf automatisch neu angelegt!



 
01.04.2011 18:20:54h Glossar top

Sonne Mond Licht Dämmerung Blaue und Goldene Stunde (folge Link php scripte)

Das Script LinkSonnenauf- und Untergangszeiten, Dämmerungszeiten und Mondphase zeigt berechnete Daten (Sonnenaufgang, Sonnenuntergang, bürgerliche Dämmerung, Natutische und Astronomische Dämmerung, Blaue Stunde, Goldene Stunde...) für den aktuellen (einen beliebigen) Tag an.

Über eine Ortssuche (kleine lokale Datenbank mit deutschen Städten) kann (halbautomatisch) eine andere geografische Koordinate eingestellt werden. Der Standort wird über eine google-Maps-Karte angezeigt.

Unterstützt der Client/Browser eine automatisierte Ortsbestimmung (Geolocation per GPS z.B.), kann diese für die Standortermittlung verwendet werden.

Natürlich kann die Position (wie alles Andere) auch manuell vorgegeben werden.

Die Daten sind nützlich, um z.B. für einen bestimmten Tag/Location die Lichtverhältnisse rund um die Dämmerungszeiten zu bestimmen. Wenn man einen Ort auswählt, bekommt man (innerhalb der Ortssuche über Datenbank) weiterführende Links (zur Stadt, zum genauen Sonnenstand, zum Wetter) angeboten. Wer es ganz genau wissen will (z.B. auch Himmelsrichtung und Höhe über dem Horizont zu bestimmten Zeiten), klickt dort auf den Link zum Sonnenstandsdiagramm (ein Service der Landeshauptstadt Stuttgart, Amt für Umweltschutz, Abt. Stadtklimatologie)...

Was wird ausgegeben?

official     Sonne geht am Horizont auf oder unter
civil         Dämmerung beginnt / endet
nautical     Umrisse (z.B. auf See) können noch schemenhaft wahrgenommen werden
astronomical Ab / bis wann ist es tatsächlich stockdüster

Ortsangepasste Daten für ein gesamtes Kalenderjahr stellt das Tool in Dateiform zum Download zur Verfügung (z.B. als CsvDatei zum Import in Excel, als vorbereitete Agenda zum einfügen in Tiddlywiki oder für Mediawiki -Syntax, im iCalendar-Format zum Import in Thunderbird oder Outlook usw.)

Fotografie

Für die Blaue und Goldene Stunde muss (kann) man sich nicht ganz exakt an die berechneten Zeiten halten, sie dienen hauptsächlich der ungefähren Orientierung
(und sind ja ohnehin Wetter/witterungsabhängig).

Für die "Blaue Stunde" kommt daher letztlich der gesamte Zeitraum in Betracht, der innerhalb der civil+nautical-Dämmerung liegt(d.h. die Sonne ist nicht mehr oberhalb des Horizontes sichtbar, aber der Himmel ist auch noch nicht tiefschwarz), Schwerpunkt wohl Richtung Zeitpunkt der "Nautischen Dämmerung".

Die goldene Stunde beginnt/endet eigentlich auch schon um die Zeiten des Sonnenauf- und -untergangs herum, von/bis hin zu Sonnenstandswinkeln von etwa max. 20 Grad oberhalb des Horizonts. Faustregel: Sonne steht dann ungefähr zwei handbreit (am ausgestreckten Arm) oberhalb des Horizonts oder tiefer.

Letztlich verwischen die Grenzen: Kurz nach Sonnenuntergang (bzw. vor Sonnenaufgang) hat man aufgrund von Lichtreflexion oft für kurze Zeit ein schönes Abend-/Morgenrot am Himmel (auch: Alpenglühen).
Umgekehrt (bei sehr tiefem Sonnenstand, also kurz vor Sonnenuntergang (nach Sonnenaufgang)) kann man schöne komplementäre Farbstimmungen einfangen, z.B. spiegeln sich dann auf bewegten Wasseroberflächen gleichzeitig gelblich/rote und magenta/mauve/blaue Farben des Himmels (aus Ost-/West-Richtungen)
- ähnliches gelingt in der blauen Stunde (ohne Sonne) dann wieder mit dem tiefblauen Himmel, als Komplementärfarben nimmt man künstliche Beleuchtungen ins Bild.

Variieren kann man mit der Licht-Ausrichtung, gerade in der Goldenen Stunde kann man gut sowohl Gegenlicht, Streiflicht als auch Vorderlicht nutzen.
Durch die stärkere Streuung (Staub, Dunst) bei tiefstehender Sonne erhält man oft "weicheres" Licht+Schatten...

Generell macht RAW (dann kann man den Weissabgleich später in Ruhe ausknobeln) und eine niedrige ISO-Zahl Sinn (Rauschen in den oft weichen / pastellfarbenen Bereichen sieht nicht gut aus). Fotografiert man in JPEG sollte man zwischendurch immer wieder die Grund-Farbstimmung kontrollieren oder einfach mit mehreren Weissabgleichs-Einstellungen "parallel" die Bilder machen (Tageslicht, Wolken, Kunstlicht, Auto bzw. WB-Belichtungsreihe wenn die Kamera das unterstützt), denn eine nachträgliche Anpassung ist später nicht ganz leicht. Genauso ist eine klassiche Belichtungsreihenautomatik per default empfehlenswert sofern man keine ganz konkreten Vorstellungen davon hat, wie die Bilder genau aussehen/wirken sollen.

Aufgrund der längeren Belichtungszeiten - spätestens nach Sonnenuntergang - sollte ein Stativ und Fernauslöser nicht fehlen...

mobiler Zugriff

Fürs Smartphone oder Tablet: Linkdiese Seite bookmarken...

 
22.10.2014 21:15:47h Glossar top

Webbasiertes Bildarchiv (folge Link php scripte)

browser4exif2csv 1.03a vom 19.09.2003

LinkDokumentation

Linkdownload 1.01a
Linkdownload 1.03a

Die LinkBackuptools oder LinkRobocopy helfen beim "spiegeln", bzw. der Datensicherung (Windowsplattform)

Um die Übersicht im eigenen digitalen "Bilderdschungel" zu behalten, sind ein paar Hilfsmittel notwendig. Neben der reinen Datenspeicherung ist natürlich auch ein leichtes wiederfinden von bestimmten Bildern wünschenswert, d.h. z.B. katalogisieren der Bilder unter Verwendung von Kategorien und/oder Stichworten. Zuguterletzt sollte das ganze "kompatibel" (z.B. sollte jederzeit eine Überführung in eine dedizierte Datenbankapplikation möglich sein), "plattformunabhängig" (problemloser Transfer zwischen verschiedenen Betriebssystemen wie Windows, Linux muss gegeben sein...) und insgesamt nicht allzu aufwendig sein.

Zwei "Komponenten" arbeiten bei mir zusammen: Eine hierarchische LinkUnterverzeichnisstruktur und Hilfsmittel in Form von php-Scripts. Zusammen ermöglicht das die folgenden Anforderungen zu bedienen:

(*)
CSV: comma separated values (trennzeichenoriente Textdatei, Trennzeichen: ";" Semikolon)
EXIF: Aufnahmedaten werden in der Bilddatei gespeichert (z.B. Vorschaubild, Blende, Belichtungszeit u.v.a.)

Verzeichnisstruktur

Ich ordne meine Bilder zeitlich sortiert. Die Kamera ist so eingestellt, dass die Bilder fortlaufend numeriert werden (also kein Rückstellen des Zählers nach löschen der CF-Karte. Muss aber auch nicht sein.).

LinkVorschlag Unterverzeichnisstruktur

Also prinzipiell geordnet nach "/kalenderjahr/monat/stichwort/bilddateiname". Und zwar die Originale.

Bearbeitete Bilder (Ausschnitt, schärfen...) SCHE ich normalerweise, sobald sie ihren Zweck erfüllt haben (i.d.R. Ausbelichtung auf Fotopapier) - Ausnahme: Die Bearbeitung erstreckte sich nicht nur auf eine schnelle Ausschnittswahl / nachschärfen / einfache Tonwertkorrektur, sondern war (relativ) aufwendig. Diese Bilder werden dann ebenfalls aufbewahrt und wandern in ein Unterverzeichnis ".../bearbeitet/" des betr. Ordners.

ÜBRIGENS - für die Fraktion der "themenorientierten" Verzeichnisfreaks.

Es spricht absolut nichts dagegen, neben dieser "zeitlich" orientierten Verzeichnisstruktur eine (mehrere) weitere, "thematisch" orientierte Verzeichnisstruktur(en) zu pflegen. In dieser zweiten (...) Struktur setzt man einfach (je nach Betriebssystem unterschiedlich) einen Link zum Originalbild. Auf diese Art und Weise spart man sich u.U. das anlegen von Kategorien in einer extra dafür angelegten Datenbank. Den Link setzt man im Zielverzeichnis z.B. unter Linux mit "ln" oder unter Windows mit "fsutil hardlink".

Zusätzlich existieren eine handvoll Scriptfiles (Windows), die zu Zwecken der Datensicherung (brennen neuer Bilder auf CD) / spiegeln Dateien auf anderen Rechner / Platte angelegt wurden (abhängig vom Archiv-Bit der Dateien, das ist aber kein Muss, es geht auch über das letzte Änderungsdatum oder man benutzt z.B. "robocopy.exe" aus dem Windows Resource Kit zur vollautomatischen Mirror-Pflege). Bei Interesse mal in die LinkBackuptools reinsehen.

Bildarchiv

Eine Reihe von php-Scripts erledigen diesen Job, solange es sich nur um ein paar hundert (wenige Tausend) Bilder handelt. Dazu ist ein lokal installiertes WAMP/LAMP (MySQL wird aber nicht benötigt) notwendig. Prinzipielle Arbeitsweise:

Ein Script zeigt verzeichnisorientiert alle Bilder der Verzeichnisstruktur an. "On-the-fly" werden Vorschaubilder und die gewünschten EXIF-Daten extrahiert/angezeigt. Gleichzeitig ermöglicht dieses Script die Vergabe/Anzeige beliebiger Kategorien und Stichworte zu jedem Bild. Bereits (automatisch) erzeugte Vorschaubilder und extrahierte Daten werden in einem separaten Verzeichnis im Hintergrund gespeichert.

Die Datenhaltung erfolgt in Form von trennzeichenorienten Textdateien (also kein Datenbankmanagementsystem notwendig. Andererseits können diese Dateien bei Bedarf als "input" für ein solches DBMS dienen...). Die Vorschaubilder sind als *.jpg-Dateien hinterlegt; für jedes Verzeichnis wird eine CSV-Datei mit den EXIF-Daten (plus evtl. Kategorien und Stichworten) automatisch angelegt und fortgeschrieben.

Ein weiteres Script arbeitet lediglich mit diesen bereits "extrahierten/Vorschau"-Daten. Es ermöglicht grundlegende "Datenbankabfragen" über die extrahierten Daten, also z.B. Abfragen wie:

Theoretisch spricht nach dem aufbauen der CSV-Dateien nichts dagegen, ganze(!) Bildverzeichnisse z.B. auf CD-R(W) oder DVD auszulagern (das "Datenbank"script arbeitet ja lediglich mit den CSV-Dateien und extrahierten Vorschaubildern). Hinweise dazu finden sich in der Dokumentation (History zu 1.03a sowie Bemerkungen "zu bekannten Problemen" durchlesen!).

Die Scripts sind für Bilder einer Canon Powershot A60/A70 optimiert/getestet (also insbesondere die speziellen CANON EXIF Makernotes werden ausgewertet), aber die wesentlichen EXIF-Daten auch anderer Kameramodelle werden angezeigt (soweit die Attribute nicht in den Makernotes des jeweiligen Herstellers "versteckt" sind). Prinzipiell können aber Makernotes anderer Hersteller leicht integriert werden - sofern das Format der Makernotes bekannt ist. Hinweise auf Quellen befinden sich am Anfang der Scriptdatei "canon.php").

Welche Daten nun genau ausgelesen werden und weitere Einzelheiten erfährt man, wenn man oben dem Link "Dokumentation" folgt. Unter "download" kann man sich die Scripts als Archiv downloaden.

Da die Scripts eher für den Heimrechner gedacht - und nicht multi-user-fähig sind - biete ich hier keine Onlineversion an. Vielleicht geben die php Bilder auf meiner php-Seite einen kleinen Einblick...

Das Datenbankabfragescript kann in meiner LinkGalerie online begutachtet werden (das ist allerdings eine leicht abgespeckte, modifizierte Version, und auch der Datenbestand ist nicht sonderlich umfangreich, weil meine Galeriebilder zumeist keine EXIF-Daten, Kategorien und Stichwörter enthalten). Dazu auf der Galeriefrontseite dem Link ''"gezielt nach Bildern suchen"'' folgen.

Hardcopys der "echten" Version:

Linkimage normale Verzeichnissicht
Linkimage Datenbankabfrage

 
29.04.2008 16:32:55h Glossar top

Weichzeichner (folge Link Basics Bildbearbeitung PSP9)

Um - ähnlich einem Korrekturfilter zum weichzeichnen (Softener) z.B. bei Portraits - Bilder etwas "weicher" wirken zu lassen (ohne allzuviel Schärfe an Kanten zu verlieren) kann man u.a. die folgenden Werkzeuge in Paint Shop Pro benutzen:

Anpassen - Bildrauschen hinzufügen/entfernen - Rauschen entfernen mit Kantenschutz

Nützlich zum entfernen von Hautunreinheiten bei Portraits...

Anpassen - Weichzeichnen - Manuell weichzeichnen

Hier kann neben der Weichzeichnung zusätzlich eine "leuchtende" Korona erzeugt werden. Das sieht meistens nicht ganz so schön aus wie die nachfolgend beschriebene Methode mittels Ebenentechnik...


image


Das Script erzeugt über LinkMasken eine Weichzeichnung insbesondere von hellen Bildanteilen. Die Schärfe in den dunkleren Bildanteilen bleibt dabei fast vollständig erhalten

Linkdownload Script

Arbeitsweise

Über die Deckfähigkeit (bzw. Transparenz) der drei oberen Ebenen:
image
sollte man die Wirkung nach persönlichem Geschmack feintunen. Das Script stellt die Weichzeichnung auf einen mittleren Wert (50 Prozent), und die Farbtreue aufs Maximum.

Anwendungsbeispiele:

Aus der Frühzeit der Entwicklung:
image

Kurz vor Abschluss, hier fehlte nur noch die abschliessende Farbsättigungskorrekturmöglichkeit:
image

 
29.04.2008 16:33:13h Glossar top