Seite 1 von 1
Bildbreite, Bildhöhe
Verfasst: 07.01.2017 20:14
von jear
Stehe mächtig auf dem Schlauch. Habe seit Jahren eine Anwendung in Betrieb, mit der ich im Hochformat (Portrait) aufgenommene Fotos erkenn und entsprechend behandele. Klappt einfach nicht mehr. Ich nutze PB 5.50 (x64). Kamera ist eine Lumix FZ200.
Nachfolgender Code sowie IrfanView bringen das im nachfolgenden Bild dargestellte Ergebnis. Die in grüner Schrift eingefügten Daten gibt PB aus. Das Bild ist eindeutig im Hochformat aufgenommen und wird von Irfan auch so angezeigt.
Wenn ich ein solches Bild per ResizeImage verkleinere und per SaveImage speichere wird es zum liegenden Bild im Querformat. Was kann da los sein?
Code: Alles auswählen
UseJPEGImageDecoder()
Im.s = "Test4.jpg" :
LoadImage(0, Im, 0)
Debug Im
IW.i = ImageWidth(0) : Debug "B: " + IW
IH.i = ImageHeight(0) : Debug "H: " + IH
IRatio.f = IW/IH : Debug "R: " + StrF(IRatio, 2)
If IRatio < 1.0
Debug "Portrait"
Else
Debug "Landscape"
EndIf
FreeImage(0)
End
Ergebnisse:
[img]
http://www.kayhausen.de/PB/Test4_Info.jpg
[/img]
Re: Bildbreite, Bildhöhe
Verfasst: 08.01.2017 07:00
von udg
ich habe es mal in die Version 5.30 x86 und v 5.43 LTS x86 geladen
in beiden zeigt das Debug korrekte Werte an:

Re: Bildbreite, Bildhöhe
Verfasst: 08.01.2017 07:18
von Pelagio
Guten Morgen jear,
ich habe Dein Beispiel mal mit PB 5.51(x86) durchgespielt und
habe die korrekten Daten, aus den Eigenschaften, auslesen können.
Code: Alles auswählen
UseJPEGImageDecoder()
UseJPEGImageEncoder()
#FileID = 11
#KopieID = 99
Global gFile.s = "Test4.jpg"
Global gKopie.s = "Kopie.jpg"
Procedure.f Anzeige(vID.i)
Protected pWidth.i, pHeight.i, pRatio.f
Debug gFile
pWidth = ImageWidth (vID) : Debug "B: " + pWidth
pHeight = ImageHeight(vID) : Debug "H: " + pHeight
pRatio = pWidth/pHeight : Debug "R: " + StrF(pRatio, 2)
ProcedureReturn pRatio
EndProcedure
LoadImage(#FileID, gFile)
If (Anzeige(#FileID)<1.0)
Debug "Portrait"
Else
Debug "Landscape"
EndIf
ResizeImage(#FileID, 4000, 2248)
SaveImage(#FileID, gKopie, #PB_ImagePlugin_JPEG)
LoadImage(#KopieID, gKopie)
If (Anzeige(#KopieID)<1.0)
Debug "Portrait"
Else
Debug "Landscape"
EndIf
FreeImage(#PB_All)
End
Re: Bildbreite, Bildhöhe
Verfasst: 08.01.2017 20:40
von alter Mann
Integerdivision ?
Code: Alles auswählen
Define I1.i,I2.i,F.f
I1 = 5
I2 = 3
Debug I1/I2
F = i1
Debug StrF(F/I2)
Re: Bildbreite, Bildhöhe
Verfasst: 10.01.2017 09:58
von Pelagio
Hallo alter Mann,
ich verstehe nicht worauf sich Deine Frage bezieht,
Teile ich zwei Integer und gebe das Ergebnis in eine Float (Double) so wird auch eine Float ausgegeben.
Code: Alles auswählen
Define I1.i,I2.i,F.f
I1 = 5
I2 = 3
F = I1/I2
Debug StrF(I1/I2)
Debug F
Re: Bildbreite, Bildhöhe
Verfasst: 10.01.2017 14:27
von jear
In grauer Vorzeit hatte PB tatsächlich Probleme mit dem Casting!
Das Problem mit den Bildern hat wohl andere Ursachen. Offenbar kümmern sich JPEGImageDecoder und JPEGImageEncoder nicht um das Orientation-Flag (EXIF). Meine Kamera gibt den Hochformat-Bilder ein "Left Bottom", den Breitformat-Bildern aber ein "Left Top" mit. Dieses Flag müsste beim Decodieren/Encodieren beachtet werden.
Wenn ich den Code von Pelagio bei solchen Bildern benutze, kommt völliger Unsinn heraus.
Beispielbilder:
Hochformat
http://www.kayhausen.de/PB/Test5_Info.jpg
Breitformat
http://www.kayhausen.de/PB/Test6_Info.jpg
Re: Bildbreite, Bildhöhe
Verfasst: 12.01.2017 11:53
von jear
Inwischen ist es mir gelungen, IrfanView per Commandline Options zur richtigen Convertierung der Bilder zu nutzen. Dabei bleiben die EXIF-Daten erhalten, die Orientierung wird auf "Top Left" vereinheitlicht und ich kann einen ganzen Ordner mit Bildern bearbeiten lassen, indem ich dessen Inhalt in einer "Filelist" zusammenstelle.
Es bleibt aber der Wunsch, dass JPEGImageDecoder und JPEGImageEncoder irgendwann die Orientierung eines Bildes beachten.