JPEG-Bildgröße (Dimensionen) auslesen

Ich arbeite momentan an einem kleinen Tool für meine Firma, die es ermöglicht, einem Kunden direkt vor Ort (während einer Mobotix-Kameraleihstellung) einen besseren Eindruck über das Bild zu geben. Sowohl wie das Bild mit unterschiedlichen Objektiven, als auch im Vergleich zu normalen Analogkameras mit geringer Auflösung aussehen würde.

Dabei musste ich feststellen, dass es weder in AutoIT noch IrfanView die Möglichkeit gibt, die Bildgröße (x mal y) auszulesen. Auch die Liste der Kommandozeilen-Tools dafür verhält sich recht bedeckt.

Nach langem Suchen im AutoIT-Forum bin ich auf folgenden Codeschnipsel gestoßen, der sehr gut funktioniert:

; Funktion: _GetJpegSize()
; Liest die Größeninformationen eines Bildes aus
Func _GetJpegSize($file)
Local $size[2]
Local $fs, $pos = 3

if not (_FileReadAtOffsetHEX ($file, 1, 2) = "FFD8") then
    SetError(1); Not Jpeg
    Return("")
endif

$fs = FileGetSize($file)

While $pos < $fs
    $data = _FileReadAtOffsetHEX ($file, $pos, 4)
    if StringLeft($data, 2) = "FF" then; Valid segment start
        if StringInStr("C0 C2 CA C1 C3 C5 C6 C7 C9 CB CD CE CF", StringMid($data, 3, 2)) then; Segment with size data
           $seg = _FileReadAtOffsetHEX ($file, $pos+5, 4)
           $size[1] = Dec(StringLeft($seg, 4))
           $size[0] = Dec(StringRight($seg, 4))
           Return($size)
        else
           $pos = $pos + Dec(StringRight($data, 4)) + 2
        endif
    else
        exitloop
    endif
Wend
SetError(2); Segment not found
Return("")
EndFunc

Func _FileReadAtOffsetHEX ($file, $offset, $bytes)
    Local $tfile = FileOpen($file, 0)
    Local $tstr = ""
    FileRead($tfile, $offset-1)
    For $i = $offset To $offset + $bytes - 1
        $tstr =  $tstr & Hex(Asc(FileRead($tfile, 1)), 2)
    Next
    FileClose($tfile)
    Return ($tstr)
Endfunc

Der Aufruf funktioniert dann wie folgt:

$img_size = _GetJpegSize("c:test.jpg")
$img_width = $img_size[0]
$img_height = $img_size[1]

Bastian

Seit 2006 bin ich täglich im IT-Umfeld unterwegs und interessiere mich für technische Lösungen im Hard- und Softwarebereich, die einem den Alltag erleichtern. Zu meinen Hobbies zählt ein 3D-Drucker, das auch (handwerkliche) Tüfteln, Scripten sowie der unqualifizierte Umgang mit dem Lötkolben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.