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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
; 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:
1 2 3 |
$img_size = _GetJpegSize("c:test.jpg") $img_width = $img_size[0] $img_height = $img_size[1] |