Seite 1 von 1
Bildinformationen (Kommentar, ...) auslesen/schreiben?
Verfasst: 13.07.2008 23:03
von Programie
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?
Verfasst: 14.07.2008 20:59
von Thomas
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

.
Verfasst: 14.07.2008 21:02
von Programie
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

.
Hmm, EXIF. Das ist doch das total komplizierte Zeug, oder?
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?
Verfasst: 15.07.2008 19:14
von [chaos]
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.
Verfasst: 30.07.2008 18:30
von Programie
[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.
Und das ist nicht zu kompliziert?

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.

Verfasst: 01.08.2008 20:47
von [chaos]
Ich hab mal schnell nen Beispielcode erstellt
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
Etwas umständlich dieser Weg aber er funktioniert bei mir einwandfrei.
Die einzelnen Datentypen und deren Interpretation stehen in der
Dokumentation.