Hi,
Wie kann man mit PureBasic Informationen über ein Bild aus der Datei des Bildes auslesen?
Also Informationen wie Kommentar oder Titel.
Und wie kann man diese Daten ändern?
Es soll mit den Formaten BMP, JPG und PNG funktionieren.
Weiß jemand, wie das geht?
Bildinformationen (Kommentar, ...) auslesen/schreiben?
- Programie
- Beiträge: 1280
- Registriert: 06.08.2005 22:56
- Computerausstattung: https://www.sysprofile.de/id160800
- Wohnort: Gernsbach
- Kontaktdaten:
- Programie
- Beiträge: 1280
- Registriert: 06.08.2005 22:56
- Computerausstattung: https://www.sysprofile.de/id160800
- Wohnort: Gernsbach
- Kontaktdaten:
Hmm, EXIF. Das ist doch das total komplizierte Zeug, oder?Thomas hat geschrieben:Das habe ich auch schon mal gefragt ...
Such mal nach Exif ...
Da gabs auch mal ne User-Lib, aber ich glaube die ging bei PB 4.xx nicht mehr.

Wegen der UserLib: Kann man die benötigten Befehle nicht einfach mit einer von der UserLib unterstützten PB-Version in ne DLL packen und dann mit PB4 die Funktionen aus der DLL aufrufen?
Exif ist das Dateiformat indem diese Informationen gespeichert werden.
Mit GDI+ lassen sich diese Informationen auslesen.
Einfach mal hier nachschauen.
Oder über den FreeImage Wrapper.
Mit GDI+ lassen sich diese Informationen auslesen.
Einfach mal hier nachschauen.
Oder über den FreeImage Wrapper.
- Programie
- Beiträge: 1280
- Registriert: 06.08.2005 22:56
- Computerausstattung: https://www.sysprofile.de/id160800
- Wohnort: Gernsbach
- Kontaktdaten:
Und das ist nicht zu kompliziert?[chaos] hat geschrieben:Exif ist das Dateiformat indem diese Informationen gespeichert werden.
Mit GDI+ lassen sich diese Informationen auslesen.
Einfach mal hier nachschauen.
Oder über den FreeImage Wrapper.

Da steht ja auch, dass GDI+ nur in Windows XP integriert ist. Geht es dann auch mit Vista? Oder ist es wirklich nur für XP?
Ich denke mal, dass es ab XP ist, oder?

Mir ist gerade was aufgefallen: Die Zip-Datei mit den Quellcodes kann man irgendwie nicht downloaden.

Und das mit FreeImage bekomme ich auch nicht zum Laufen.

Ich hab mal schnell nen Beispielcode erstellt
Etwas umständlich dieser Weg aber er funktioniert bei mir einwandfrei.
Die einzelnen Datentypen und deren Interpretation stehen in der Dokumentation.
Code: Alles auswählen
#LIB_FREEIMAGE = 1
IncludeFile "freeimage_functions.pb"
IncludeFile "freeimage_struct.pb"
Procedure GetEXIF(Model.b)
Shared dib
mdhandle = FreeImage_FindFirstMetadata(Model, dib, @tag)
If mdhandle
Repeat
tagDesc$ = PeekS(FreeImage_GetTagKey(tag))
tagType = FreeImage_GetTagType(tag)
FreeImage_GetMetadata(Model, dib, tagDesc$, @tagData)
tagData = FreeImage_GetTagValue(tagData)
If tagType = 1 ; 8-bit unsigned byte
Debug tagDesc$+" >> "+Str(PeekB(tagData) & $FF)
ElseIf tagType = 2 ; ASCII-String
Debug tagDesc$+" >> "+PeekS(tagData)
ElseIf tagType = 3 ; 16-bit unsigned word
Debug tagDesc$+" >> "+Str(PeekW(tagData) & $FFFF)
ElseIf tagType = 4 ; 32-bit unsigned long
Debug tagDesc$+" >> "+Str(PeekL(tagData) & $FFFFFFFF)
ElseIf tagType = 5 ; 64-bit unsigned quad
Debug tagDesc$+" >> "+Str(PeekQ(tagData) & $FFFFFFFFFFFFFFFF)
ElseIf tagType = 6 ; 8-bit signed byte
Debug tagDesc$+" >> "+Str(PeekB(tagData))
ElseIf tagType = 7 ; 8-bit untyped data
Debug tagDesc$+" >> "+Str(PeekB(tagData))
ElseIf tagType = 8 ; 16-bit signed word
Debug tagDesc$+" >> "+Str(PeekW(tagData))
ElseIf tagType = 9 ; 32-bit signed long
Debug tagDesc$+" >> "+Str(PeekL(tagData))
ElseIf tagType = 10 ; 64-bit signed quad
Debug tagDesc$+" >> "+Str(PeekQ(tagData))
ElseIf tagType = 11 ; 32-bit float
Debug tagDesc$+" >> "+Str(PeekF(tagData))
ElseIf tagType = 12 ; 64-bit double
Debug tagDesc$+" >> "+Str(PeekD(tagData))
; ElseIf tagType = 13 ; 32-bit unsigned long as offset
; Debug tagDesc$+" >> "+Str(PeekL(tagData) & $FFFFFFFF)
; ElseIf tagType = 13 ; 32-bit as RGBQUAD - *Result.RGBQUAD
; Debug tagDesc$+" >> "+Str(PeekL(tagData) & $FFFFFFFF)
EndIf
sid = FreeImage_FindNextMetadata(mdhandle, @tag)
Until sid = #Null
FreeImage_FindCloseMetadata(mdhandle)
Else
Debug "No metadata found!"
EndIf
EndProcedure
OpenLibrary(#LIB_FREEIMAGE, "freeimage.dll")
File$ = OpenFileRequester("Select file with EXIF information", "", "*.*", 0)
If Not File$
End
EndIf
fif = FreeImage_GetFileType(File$, 0)
If fif = #FIF_UNKNOWN
Debug "Unknown signature! Guessing filetype!"
fif = FreeImage_GetFIFFromFilename(File$)
EndIf
If fif <> #FIF_UNKNOWN And FreeImage_FIFSupportsReading(fif)
dib = FreeImage_Load(fif, File$, #Null)
GetEXIF(#FIMD_EXIF_MAIN)
GetEXIF(#FIMD_EXIF_EXIF)
FreeImage_Unload(dib)
EndIf
Die einzelnen Datentypen und deren Interpretation stehen in der Dokumentation.