Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Foto bewerten
#1
Hallo Forum,

mit dem folgenden Code lässt sich die Bewertung eines Fotos auslesen.

Sub getRanking()
    Dim OFS As Object, oFile As Object
    Dim objShell As Object, objFolder As Object
    Dim strPath, strFile As String
   
    strFile = "C:\Test\Foto.JPG"
    'FileSystemObjekte
    Set OFS = CreateObject("Scripting.FileSystemObject")
    Set oFile = OFS.GetFile(strFile)
    strPath = oFile.ParentFolder
   
    'ShellObjekte
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(strPath)
    'Bewertung
    Debug.Print objFolder.GetDetailsOf(objFolder.Items.Item(oFile.Name), 19)
End Sub

Wie kann man diese Dateieigenschaft via VBA-Code ändern?

mfG
Rolf Beißner
Antworten Top
#2
Hallo,

die Bewertung kann zwar per Hand im Explorer geändert werden, aber m.W.n. nicht mit VBA. Auch in meinen Unterlagen zu WIA habe ich nicht gefunden.

Es gibt auch API-Zugriffe auf die Properties, aber auch da fand ich keine Beispiele für diesen Zweck.

Gefunden habe ich ein VB-Project "ExIf-Writer", das verspricht solche Änderungen vornehmen zu können (ähnlich wie C++ uä)

Vermutlich ist es das Einfachste ein Foto-Software wie "Exiftools" zu nutzen (oder Lightroom).

Ich hoffe, es kommen noch andere Beiträge.

mfg
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Rolf Beißner
Antworten Top
#3
Hallo Forum,

die angestrebte Lösung - "Foto bewerten via VBA" - habe ich nicht gefunden.
Stattdessen einen "work-around", der für meine Zwecke - "bestimmte Fotos kennzeichnen zwecks Filtermöglichkeit" - ausreicht.
Für etwaige Interessenten hier der entsprechende Code.

fG
Rolf Beißner


Code:
Option Explicit
' Bildkopie mit Kommentar in sep. Verzeichnis anlegen
' Verweis setzen auf: "Microsoft Windows Image Acquisition Library v2.0"
Sub setProp()
    'Deklarationen
    Dim objImage As ImageFile
    Dim objIP  As ImageProcess
    Dim objVector As Vector
    Dim strID As Variant
    Dim strFile As String
    Dim iRow As Integer, iCount As Integer
   
    'Property-IDs
    strID = Array("40091", "40092", "40093", "40094", "40095") 'Titel,Kommentar,Autor,Stichwort,Betreff
    
    'WIA-Objekte
    Set objImage = CreateObject("WIA.ImageFile")
    Set objIP = CreateObject("WIA.ImageProcess")
    Set objVector = CreateObject("WIA.Vector")
    
    'Anzahl der Einträge im aktiven Sheet (ab Zeile 2)
    iCount = 5
   
    'Einträge abarbeiten
    For iRow = 1 To iCount
       
        'vollständiger Dateiname  - z.B. "C:\Test\Foto.jpg"
        strFile = Cells(iRow + 1, 1)
       
        'Bild laden
        objImage.LoadFile strFile
        
        'Filter Parameter
        objIP.Filters.Add objIP.FilterInfos("Exif").FilterID
        objIP.Filters(1).Properties("ID") = strID(1) 'hier Kommentar
        objIP.Filters(1).Properties("Type") = VectorOfBytesImagePropertyType
       
        'Kommentartext
        objVector.SetFromString "Auswahl"
        objIP.Filters(1).Properties("Value") = objVector
       
        'Kommentar einstellen
        Set objImage = objIP.Apply(objImage)
            
        'Bild unter gleichem Namen in sep Verzeichnis speichern (hier "..Test\Auswahl\..")
        objImage.SaveFile Replace(strFile, "Test\", "Test\Auswahl\")
    Next
End Sub
Antworten Top
#4
Hallo,

danke für den Hinweis.

Das "CreationDate" ist nicht so einfach zuändern, aber so geht es:

Code:
$Tag = get-date

Set-ItemProperty -Path C:\Users\User\Desktop\Kreis.jpg -Name 'CreationTime' -Value $Tag.AddDays(-12)

Get-ItemProperty -Path C:\Users\User\Desktop\Kreis.jpg -Name 'CreationTime'

(Powershell)

mfg
Antworten Top
#5
Hallo Fennek,

danke für den Tipp. Sehr hübsch Blush
Gibt es auch die Möglichkeit, das im Windowsexplorer angezeigte Aufnahmedatum zu modifzieren?

fG
Rolf
Antworten Top
#6
na ja, wenn Du fragst:

https://chrisjwarwick.wordpress.com/2011...-cmdlet-2/

Im Netz gibt es auch Ansätze für C++.
Antworten Top
#7
Hallo Rolf, :19:

so setzt du die drei Zeiten "Erstellt", "Geändert" und "Letzter Zugriff" mit PowerShell:

Code:
$DateTime = get-date 10.10.2019-14:00
[System.IO.File]::SetLastWriteTime("C:\Temp\rh.jpg", $DateTime)
[System.IO.File]::SetLastAccessTime("C:\Temp\rh.jpg", $DateTime)
[System.IO.File]::SetCreationTime("C:\Temp\rh.jpg", $DateTime)

Noch gibt es die Unterschiede UTC+2 / UTC+1 - je nach Sommer- bzw. Winterzeit.

Alle JPG-Dateien eines Ordners - "Geändert" = "Erstellt" in PowerShell:

Code:
gci C:\Temp\*.jpg | ? {!$_.PSisContainer} | % {$_.LastWriteTime=$_.CreationTime}

Für Das Aufnahmedatum nutze ich "jhead". In der Dokumentation ist für dich der Parameter "-dsft" interessant.

Um das Aufnahmedatum eines Bildes zu ändern:

Code:
C:\Temp\jhead.exe -dsft C:\Temp\rh.jpg

Da es ein "Kommandozeilentool" ist, lässt es sich auch per VBA steuern. :21:
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • Rolf Beißner
Antworten Top
#8
Diese Quelle ist besser:

https: //social.technet.microsoft.com/Forums/scriptcenter/en-US/8b398413-0728-4a8a-a593-d2e8b92b88f2/editing-image-exif-tags?forum=ITCG

Damit reduziert sich das PS-Script (an einem Beispiel getestet):

Code:
$f = 'C:\Users\Office\Desktop\Date_Test2.jpg'

$img = [System.Drawing.Image]::FromFile($f)

$item = $img.psbase.GetPropertyItem(36867)

$New_time = get-date 01.12.2015 #$Old_time.Add('100')

$NT_Str = $New_time.ToString("yyyy:MM:dd HH:mm:ss`0")

$item.Value = [byte[]][System.Text.Encoding]::ASCII.GetBytes($NT_Str)

$img.SetPropertyItem($item)

$img.Save('C:\users\Office\Desktop\neu.jpg')
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Case
Antworten Top
#9
Guten Morgen Fennek,

vielen Dank für deine Mühe Blush 
Klappt vorzüglich. Erstaunlich, was alles geht.

Herzliche Grüße
Rolf
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste