none
Meta Daten aus Bilddatei auslesen RRS feed

  • Frage

  • Hallo zusammen,

    Ich will aus einer Bilddatei die Meta Daten auslesen, bisher leider ohne erfolg.
    auf der Bord eigenen Suche habe ich diesen thread gefunden: LINK

    Leider sind die Links darin nicht mehr aktuell und führen ins nirgendwo.
    auf google habe ich auch etwas gefunden z.B:

    Function Get-FileMetaData
    {
     Param([string[]]$folder)
     foreach($sFolder in $folder)
      {
       $a = 0
       $objShell = New-Object -ComObject Shell.Application
       $objFolder = $objShell.namespace($sFolder)
    
       foreach ($File in $objFolder.items())
        { 
         $FileMetaData = New-Object PSOBJECT
          for ($a ; $a  -le 266; $a++)
           { 
             if($objFolder.getDetailsOf($File, $a))
               {
                 $hash += @{$($objFolder.getDetailsOf($objFolder.items, $a))  =
                       $($objFolder.getDetailsOf($File, $a)) }
                $FileMetaData | Add-Member $hash
                $hash.clear() 
               } #end if
           } #end for 
         $a=0
         $FileMetaData
        } #end foreach $file
      } #end foreach $sfolder
    } #end Get-FileMetaData

    Aber leider funktioniert diese Funktion auch nicht.
    Es muss doch möglich sein an die Information heranzukommen?

    Vielen Dank im voraus!


    Freitag, 9. September 2016 08:09

Antworten

  • Wenn es um bilder geht - exiftool




    Freitag, 9. September 2016 08:17
  • OK, abhängig davon, wieviele verschiedene Werte Du extrahieren möchtest, könnte es ein wenig aufwändiger werden, aber als Beispiel hier nur mal der eine Wert:

    Wenn Du die Ausgabe des Exiftools in die Variable $out geschrieben hast, dann kannst Du mit folgendem Regulären Ausdruck nach dem 'Light Value' fischen:

    $out -match 'Light\s+Value\s+:\s+(\d+\.\d+)'
    ... und Dein Wert steht dann in 
    $Matches[1]
     ...  isses das ungefähr?


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Freitag, 9. September 2016 14:27

Alle Antworten

  • Wenn es um bilder geht - exiftool




    Freitag, 9. September 2016 08:17
  • Danke für dieses Tool. Funktioniert soweit auch einwandfrei. 
    ich müsste die Daten aber irgendwie in einem Object drin haben, da ich versuche Bilder umzubenennen mit den hinterlegten Koordinaten.

    soweit ich das verstanden habe gibt mir exiftool "nur" eine liste aus.
    Freitag, 9. September 2016 08:57
  • Die Dateien 'fängst' Du mit einem Get-ChildItem ein und 'beackern' kannst Du sie dann in einer Foreach Schleife. Etwas Ähnliches hattest Du in Deinem Script ja schon drin. Dateien umbenennen kannst Du mit Rename-Item.

    Wenn Du Hilfe zu den einzelnen cmdlets brauchst, kannst Du Dir mit Get-Help <cmdlet> -Full eine ziemlich umfangreiche Hilfe angucken, die auch Beispiele mitliefert. Nur die Beispiele bekommst Du mit Get-Help <cmdlet> -Examples




    • Bearbeitet BOfH-666 Freitag, 9. September 2016 11:28
    Freitag, 9. September 2016 09:47
  • Olaf, kannst du bitte Code, der nichts mit dem Post zu tun hat, in die Signatur verschieben? Die meisten Anfänger dürften nicht checken das das ne Unterschrift ist. Danke.
    Übrigens ist die auch kaputt, da statt zwei Single-Quotes ein einzelnes Double-Quote da steht. :)

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Neu: Powershell Code Manager v5 ! Link
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.



    Freitag, 9. September 2016 10:49
    Moderator
  • Erledigt.

    Danke für den Hinweis.


    Grüße - Best regards (79,108,97,102|%{[char]$_})-join''

    Freitag, 9. September 2016 11:28
  • Vielen dank,
    habe mich wahrscheinlich ein bisschen undeutlich ausgedrückt. meine Frage war wie bekomme ich den wert eines Feldes in eine variable? exiftool gibt mir eine "dumme" liste zurück.
    Beispiel: Lichtwert : 6.6  wie bekomme ich nun den wert (6.6) in eine variable?
    • Bearbeitet Pin-Lui Freitag, 9. September 2016 13:19
    Freitag, 9. September 2016 13:12
  • Hmmm ... jetzt hast Du mich erwischt  ... ich hab selber noch nie damit gearbeitet. ;-)

    Ich hoffe mal, Get-Help about_Variables hast Du Dir schon angeguckt. Wenn das Exiftool jetzt keine Option hat, die nur einen einzigen Wert ausgibt, den Du einer entsprechenden Variable zuweisen kannst, musst Du den Output des Tools erstmal komplett in eine Variable speichern und dann mit Stringoperationen (Get-Help about_Split) oder mit Regulären Ausdrücken auftrennen und dann einer Variablen zuweisen.

    Wie sieht der Output vom exiftool aus?


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Freitag, 9. September 2016 13:45
  • naja das mit dem einlesen und splitten will ich eigentlich vermeiden, ganz schön aufwendig für so ein kleines Script:)

    die Ausgabe eines beispiel Bildes sieht so aus:
    ---- ExifTool ----
    ExifTool Version Number         : 10.25
    ---- System ----
    File Name                       : 1.jpg
    Directory                       : C:/
    File Size                       : 1555 kB
    File Modification Date/Time     : 2016:04:01 09:06:38+02:00
    File Access Date/Time           : 2016:09:08 16:21:27+02:00
    File Creation Date/Time         : 2016:09:08 16:21:27+02:00
    File Permissions                : rw-rw-rw-
    ---- File ----
    File Type                       : JPEG
    File Type Extension             : jpg
    MIME Type                       : image/jpeg
    Exif Byte Order                 : Big-endian (Motorola, MM)
    Image Width                     : 3264
    Image Height                    : 2448
    Encoding Process                : Baseline DCT, Huffman coding
    Bits Per Sample                 : 8
    Color Components                : 3
    Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
    ---- IFD0 ----
    Make                            : Apple
    Camera Model Name               : iPhone 6 Plus
    Orientation                     : Horizontal (normal)
    X Resolution                    : 72
    Y Resolution                    : 72
    Resolution Unit                 : inches
    Software                        : 9.2.1
    Modify Date                     : 2016:04:01 08:22:21
    Y Cb Cr Positioning             : Centered
    ---- ExifIFD ----
    Exposure Time                   : 1/33
    F Number                        : 2.2
    Exposure Program                : Program AE
    ISO                             : 160
    Exif Version                    : 0221
    Date/Time Original              : 2016:04:01 08:22:21
    Create Date                     : 2016:04:01 08:22:21
    Components Configuration        : Y, Cb, Cr, -
    Shutter Speed Value             : 1/33
    Aperture Value                  : 2.2
    Brightness Value                : 2.031811185
    Exposure Compensation           : 0
    Metering Mode                   : Multi-segment
    Flash                           : Off, Did not fire
    Focal Length                    : 4.2 mm
    Subject Area                    : 1631 1223 1795 1077
    Sub Sec Time Original           : 680
    Sub Sec Time Digitized          : 680
    Flashpix Version                : 0100
    Color Space                     : sRGB
    Exif Image Width                : 3264
    Exif Image Height               : 2448
    Sensing Method                  : One-chip color area
    Scene Type                      : Directly photographed
    Exposure Mode                   : Auto
    White Balance                   : Auto
    Focal Length In 35mm Format     : 29 mm
    Scene Capture Type              : Standard
    Lens Info                       : 4.15mm f/2.2
    Lens Make                       : Apple
    Lens Model                      : iPhone 6 Plus back camera 4.15mm f/2.2
    ---- Apple ----
    Apple 0x0001                    : 4
    Apple 0x0002                    : bplist00O..æñï×Õ›1,'!..,FTLÝáÞÀÀ”[...]
    Run Time Flags                  : Valid
    Run Time Value                  : 219526556464541
    Run Time Epoch                  : 0
    Run Time Scale                  : 1000000000
    Apple 0x0004                    : 1
    Apple 0x0005                    : 169
    Apple 0x0006                    : 163
    Apple 0x0007                    : 1
    Apple 0x0008                    : -0.8065927655 0.05839030766 -0.5486097795
    Apple 0x0009                    : 275
    Apple 0x000c                    : 0.29296875 0.41796875
    Apple 0x000d                    : 0
    Apple 0x000e                    : 12
    Apple 0x000f                    : 3
    Apple 0x0010                    : 1
    Apple 0x0014                    : 4
    ---- GPS ----
    GPS Latitude Ref                : North
    GPS Latitude                    : 47 deg 34' 50.85"
    GPS Longitude Ref               : East
    GPS Longitude                   : 9 deg 20' 49.15"
    GPS Altitude Ref                : Above Sea Level
    GPS Altitude                    : 421.7736486 m
    GPS Time Stamp                  : 06:22:21.14
    GPS Speed Ref                   : km/h
    GPS Speed                       : 0.59
    GPS Img Direction Ref           : True North
    GPS Img Direction               : 239.8489583
    GPS Dest Bearing Ref            : True North
    GPS Dest Bearing                : 239.8489583
    GPS Date Stamp                  : 2016:04:01
    GPS Horizontal Positioning Error: 10 m
    ---- IFD1 ----
    Compression                     : JPEG (old-style)
    X Resolution                    : 72
    Y Resolution                    : 72
    Resolution Unit                 : inches
    Thumbnail Offset                : 2098
    Thumbnail Length                : 8158
    ---- Composite ----
    Aperture                        : 2.2
    GPS Altitude                    : 421.7 m Above Sea Level
    GPS Date/Time                   : 2016:04:01 06:22:21.14Z
    GPS Latitude                    : 47 deg 34' 50.85" N
    GPS Longitude                   : 9 deg 20' 49.15" E
    GPS Position                    : 47 deg 34' 50.85" N, 9 deg 20' 49.15" E
    Image Size                      : 3264x2448
    Megapixels                      : 8.0
    Run Time Since Power Up         : 2 days 12:58:46
    Scale Factor To 35 mm Equivalent: 7.0
    Shutter Speed                   : 1/33
    Create Date                     : 2016:04:01 08:22:21.680
    Date/Time Original              : 2016:04:01 08:22:21.680
    Thumbnail Image                 : (Binary data 8158 bytes, use -b option to extract)
    Circle Of Confusion             : 0.004 mm
    Field Of View                   : 63.7 deg
    Focal Length                    : 4.2 mm (35 mm equivalent: 29.0 mm)
    Hyperfocal Distance             : 1.82 m
    Light Value                     : 6.6
    (krass was alles so hinterlegt ist in einem jpg)
     
    • Bearbeitet Pin-Lui Freitag, 9. September 2016 14:01
    Freitag, 9. September 2016 14:00
  • OK, abhängig davon, wieviele verschiedene Werte Du extrahieren möchtest, könnte es ein wenig aufwändiger werden, aber als Beispiel hier nur mal der eine Wert:

    Wenn Du die Ausgabe des Exiftools in die Variable $out geschrieben hast, dann kannst Du mit folgendem Regulären Ausdruck nach dem 'Light Value' fischen:

    $out -match 'Light\s+Value\s+:\s+(\d+\.\d+)'
    ... und Dein Wert steht dann in 
    $Matches[1]
     ...  isses das ungefähr?


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Freitag, 9. September 2016 14:27
  • Hallo,
    Ja funktioniert soweit eigentlich ganz gut. Ich denke damit kann ich arbeiten. Vielen Dank
    Montag, 12. September 2016 06:49
  • Eine Frage hätte ich da noch,
    Mein Script das den GPS Time stamp ausliest und das File renamed sieht so aus:
    $FilePath = "C:\1.jpg"
    $cmdOutput = &"C:\exiftool.exe" $FilePath | Out-String
    # Write-Output = $cmdOutput
    $cmdOutput -match 'GPS\s+Date\s+Stamp\s+:\s+(\d+\:\d+\:\d+)'
    $NewFileName = $Matches[1].Replace(":","_")
    # out-file C:\1.txt -InputObject $NewFileName
    Rename-Item $FilePath $NewFileName
    Das Problem ist logischerweise überschreibt er den ganzen Datei Namen, also auch *.JPEG
    wie kann ich die Datei Endung "konservieren"? hardcoden möchte ich sie nicht da es ja nicht umbedingt ein JPEG sein muss. 


    • Bearbeitet Pin-Lui Dienstag, 13. September 2016 08:57
    Dienstag, 13. September 2016 08:54
  • Get-Item -Path $FilePath | select -ExpandProperty Extension
    Es ist übrigens keine Schande, gelegentlich mal die Google-Suche zu bemühen! ;-)

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Dienstag, 13. September 2016 09:10
  • Es ist übrigens keine Schande, gelegentlich mal die Google-Suche zu bemühen! ;-)

    Naja ohne google wäre ich wohl nie auf die Lösung gekommen die ich oben geposted habe, deine Antworten haben mich in die richtige Richtung gelenkt. auch mit dem hier:

    Get-Item -Path $FilePath | select -ExpandProperty Extension

    weiss ich überhaupt nicht was ich anfangen soll. aber google wird es schon richten ^^ 

    Danke für die Hilfe

    Pin


    • Bearbeitet Pin-Lui Dienstag, 13. September 2016 09:50
    Dienstag, 13. September 2016 09:30
  • Pin-Lui,

    Du hattest gefragt, wie Du die Dateiendung konservieren kannst. Der Code-Schnipsel 

    Get-Item -Path $FilePath | select -ExpandProperty Extension

    gibt Dir die Endung der Datei aus, deren Pfad in der Variablen $FilePath gespeichert ist. Wenn Du also vorm Umbenennen die Dateiendung in einer weiteren Variablen zwischenspeicherst, kannst Du sie beim Umbenennen hinten anhängen.

    Der komplette Code wär dann das hier:

    $FilePath = "C:\1.jpg"
    $DateiEndung = Get-Item -Path $FilePath | select -ExpandProperty Extension
    $cmdOutput = &"C:\exiftool.exe" $FilePath | Out-String
    # Write-Output = $cmdOutput
    $cmdOutput -match 'GPS\s+Date\s+Stamp\s+:\s+(\d+\:\d+\:\d+)'
    $NewFileName = $Matches[1].Replace(":","_") + $DateiEndung
    # out-file C:\1.txt -InputObject $NewFileName
    Rename-Item $FilePath $NewFileName
    ... müsste eigentlich passen ... ;-)

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Dienstag, 13. September 2016 11:25
  • Sie haben wirklich Ahnung.

    Der Artikel hat sehr gut erklärt

    Dienstag, 13. September 2016 11:46
  • Jop vielen dank nun funktioniert es wie gewünscht (ich hätte da wahrscheinlich noch ne stunde rumgebastelt bis ich es hinbekommen hätte^^). Danke! 
    • Bearbeitet Pin-Lui Dienstag, 13. September 2016 12:01
    Dienstag, 13. September 2016 11:58