PDA

Vollständige Version anzeigen : Bild format erkennen?


andread
22.06.2001, 09:24
Hallo,
ich will in meiner datenbank erkennen ob der Dateiname einer jpg oder gif datei der in einem Feld gespeichert ist die richtige pixelgrösse hat!
Zb feld 1 max 100x60pixel
feld 2 max 340x210
feld 3 max 450x270
geht das irgendwie?

danke
andrea

C. Palmetshofer
25.06.2001, 11:36
für jpg hab ich was, für gif bin ich noch am suchen!

andread
25.06.2001, 18:52
Hallo C. Palmetshofer,

super, das du was für jpg hast!!

das ist für mich eigentlich primär!

gif hatte ich eigentlich nur so angeführt, da ich dachte das ist eh alles das gleiche!
Offensichtlich doch nicht!

würde mich freuen wenn du deinen jpg vorschlag hier posten würdest!

grüsse und aller herzlichen Dank

andrea

C. Palmetshofer
26.06.2001, 08:48
hi andrea,

GIF:
byte 1-3 GIF
byte 4-6 version (z.B. 89a)
byte 7-8 breite (2 bytes lo-hi)
byte 9-10 höhe (2 bytes lo-hi)

JPG:
byte 1-2 $ff, $d8 - kennzeichnung für JPEG-file
innerhalb des files gibt es eine kennung $ff, $c0.
diese bezeichnet den 'start of frame' (SOF0)
danach folgen in
byte 4-5 höhe (2 bytes hi-lo)
byte 6-7 breite (2 bytes hi-lo)

Gruss

andread
26.06.2001, 10:00
Hallo C. Palmetshofer,

vielen Dank für deinen Tip!

aber, jetzt hilf mir bitte wie ich in einer jpg-datei diese Informationen via makro auslese?
Ich glaube, man mus das ding doch jetzt irgendwie binär lesen, oder?
kannst du ein Makro hier posten um aufzuzeigen wie ein Lösungsweg aussehen könnte?

Gruss Andrea

C. Palmetshofer
26.06.2001, 10:26
hallo andrea,

mit folgender Funktion geht's!


Function getpsize(filename As String, par As String)
'by C. Palmetshofer 2001

Dim inVal1 As Byte, inVal2 As Byte
Dim inVal3 As Byte, inVal4 As Byte
Dim x2 As String * 2, x3 As String * 3
Dim jpgID As String * 3, gifID As String * 3
Dim SOF0 As String * 2
Dim fileNr As Integer

jpgID = Chr(&HFF) & Chr(&HD8) & Chr(&HFF)
SOF0 = Chr(&HFF) & Chr(&HC0)
gifID = "GIF"

If Dir(filename) <> "" Then
fileNr = FreeFile
Open filename For Binary Access Read As fileNr
Get fileNr, 1, x3
Select Case x3
Case jpgID
i = 0
Do
i = i + 1
Get fileNr, i, x2
If StrComp(x2, SOF0, vbBinaryCompare) = 0 Then
offset = i + 5
Get fileNr, offset, inVal1
Get fileNr, offset + 1, inVal2
Get fileNr, offset + 2, inVal3
Get fileNr, offset + 3, inVal4
Exit Do
End If
Loop Until EOF(fileNr)
Case gifID
Get fileNr, 7, inVal4
Get fileNr, 8, inVal3
Get fileNr, 9, inVal2
Get fileNr, 10, inVal1
Case Else
MsgBox "this is neither a GIF- nor a JPEG-file!", vbExclamation
End Select
Select Case par
Case "height": getpsize = inVal1 * 256 + inVal2
Case "width": getpsize = inVal3 * 256 + inVal4
Case Else: MsgBox "parameter '" & par & "' not available!", vbExclamation
End Select
Close fileNr
Else
MsgBox "file '" & filename & "' not found!", vbExclamation
End If
End Function


Gruss

andrad
26.06.2001, 12:02
Bussi an C.

vieln Dank,
!! klappt super !!!

Andrea

andread
26.06.2001, 19:52
Hopla,

offensichtlich zu früh gefreut!

Irgendwie gibts mit bestimmten Bildern Probleme! Das Makro gibt als Bildgrösse 0 an und es dauert auch ein wenig länger bis das ergebniss vorliegt!

Hast du einen Tipp?
würde dir gerne mal ein Bild senden welches geht und welches nicht geht! ist das möglich?


Grüsse Andread

C. Palmetshofer
27.06.2001, 08:14
hallo andrea,

ich habe keinen tipp, schick die beiden bilder!