Warum liefert die Aufnahme von Bildern mit AVFoundation 480x640 Bilder, wenn die Voreinstellung 640x480 ist?

8

Ich habe einen ziemlich einfachen Code, um ein Standbild mit AVFoundation aufzunehmen.

%Vor%

Meine Methode, die das Standbild aufnimmt, ist auch ziemlich einfach und gibt die Orientierung aus, die AVCaptureVideoOrientationPortrait:

ist %Vor%

Damit das Gerät versteht, dass es im Hochformat ist, wie es sein sollte, zeigen mir die Exif-Anhänge:

%Vor%

so scheint es zu wissen, dass wir in 640x480 sind und das bedeutet WxH (offensichtlich ...)

Wenn ich jedoch das Foto von der App "Apples Photos" an mich selbst sende, erhalte ich ein 480x640-Bild, wenn ich die Eigenschaften in der Vorschau überprüfe. Das machte für mich keinen Sinn, bis ich weiter in Bildeigenschaften gegraben habe, um herauszufinden, dass die Bildausrichtung auf "6 (gedreht 90 Grad CCW)" eingestellt ist. Ich bin mir sicher, CCW ist gegen den Uhrzeigersinn

Also schauen Sie sich das Bild in einem Browser an: Ссылка Wir sehen ein Bild um 90 Grad gedreht und es ist 640x480.

Ich bin wirklich verwirrt über dieses Verhalten. Wenn ich ein Standbild von 640x480 mit AVFoundation anwende, würde ich erwarten, dass der Standard keine gedrehte Ausrichtung hat. Ich erwarte ein 640x480-Bild, das genau so ausgerichtet ist, wie mein Auge das Bild in der Vorschauebene sieht. Kann jemand erklären, warum das passiert und wie man das Capture so konfiguriert, dass es, wenn ich mein Bild auf dem Server speichere, um es später in einer Web-Ansicht anzuzeigen, nicht um 90 Grad gedreht wird?

    
Tony 07.08.2011, 22:26
quelle

1 Antwort

33

Dies geschieht, weil die in den Metadaten des neuen Bildes festgelegte Ausrichtung durch die Ausrichtung des AV-Systems, das es erzeugt, beeinflusst wird. Das Layout der eigentlichen Bilddaten unterscheidet sich natürlich von der in Ihren Metadaten genannten Ausrichtung. Einige Bildanzeigeprogramme berücksichtigen die Ausrichtung der Metadaten, manche ignorieren sie.

Sie können die Metadatenausrichtung des AV-Systems beeinflussen, indem Sie Folgendes aufrufen:

%Vor%

Sie können die Metadatenausrichtung eines UIImage beeinflussen, indem Sie Folgendes aufrufen:

%Vor%

Aber die tatsächlichen Daten vom AVCapture-System werden immer mit der breiteren Dimension als X und der schmaleren Dimension als Y angezeigt und scheinen in LandscapeLeft ausgerichtet zu sein.

Wenn Sie möchten, dass die tatsächlichen Daten mit den Angaben Ihrer Metadaten übereinstimmen, müssen Sie die tatsächlichen Daten ändern. Sie können dies tun, indem Sie das Bild mit CGContexts und AffineTransforms in ein neues Bild schreiben. Oder es gibt eine einfachere Problemumgehung, verwenden Sie das UIImage + Resize-Paket, wie hier hier . Ändern Sie die Größe des Bildes auf die aktuelle Größe, indem Sie Folgendes aufrufen:

%Vor%

Dies korrigiert die Ausrichtung der Daten als Nebeneffekt.

Wenn Sie nicht die gesamte UIImage + Resize-Sache einbeziehen möchten, können Sie den Code auschecken und die Teile ausstreichen, an denen die Daten transformiert werden.

    
veltrop 10.08.2011, 04:43
quelle