Ich teste meine iPhone-Anwendung auf einem iPhone mit iOS 3.1.3. Ich wähle / nehme ein Bild mit einem UIImagePickerController
:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setDelegate:self];
[self.navigationController presentModalViewController:imagePicker animated:YES];
[imagePicker release];
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
self.image = [info objectForKey:UIImagePickerControllerOriginalImage];
imageView.image = self.image;
[self.navigationController dismissModalViewControllerAnimated:YES];
submitButton.enabled = YES;
}
Ich sende es dann irgendwann mit den ASI-Klassen an meinen Webserver:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://example.com/myscript.php"]];
[request setDelegate:self];
[request setStringEncoding:NSUTF8StringEncoding];
[request setShouldContinueWhenAppEntersBackground:YES];
//other post keys/values
[request setFile:UIImageJPEGRepresentation(self.image, 100.0f) withFileName:[NSString stringWithFormat:@"%d.jpg", [[NSDate date] timeIntervalSinceNow]] andContentType:@"image/jpg" forKey:@"imageFile"];
[request startAsynchronous];
Das Problem: Wenn ich ein Bild mit dem iPhone im Querformat aufnehme, wird das Bild auf den Server hochgeladen und wie erwartet angezeigt. Wenn Sie ein Bild aufnehmen, das das Telefon im Hochformat hält, wird das Bild hochgeladen und so angezeigt, als wäre es um 90 Grad gedreht worden.
Meine Anwendung funktioniert nur im Hochformat (Upsidedown und Regular).
Wie kann ich dafür sorgen, dass das Bild nach dem Hochladen immer die richtige Ausrichtung aufweist?
Das Bild scheint korrekt zu sein, wie es in einer UIImageView angezeigt wird (direkt nach der Aufnahme des Bildes), aber die Anzeige auf dem Server sagt etwas anderes aus.
Ich habe eine viel einfachere herausgefunden:
Übrigens: @ Anomies Code
scale
berücksichtigt dies nicht und funktioniert daher nicht für 2x Bilder.quelle
self
Ihr UIImage-Objekt ersetzen.Hier ist eine Swift-Version der Antwort von @ an0:
Auch in einer allgemeineren Funktion:
Swift 3 Version:
quelle
Lösung für Swift 3.1 für Orientierungsprobleme beim Aufnehmen des Bildes von der Kamera.
Ich habe die von Jake und Metal Heart gegebene Lösung aktualisiert
UIImage-Erweiterung
Swift 2.0
Verwendung dieser UIImage-Erweiterung in Ihrem Code:
let fixOrientationImage = selectedImage.fixOrientation ()
Platzieren Sie dies in Ihren delegierten Methoden der Bildauswahl wie folgt
Swift 3.1
Swift 2.0
quelle
in schnell;)
UPDATE SWIFT 3.0: D.
quelle
Swift 4.x / 5.0 Version der
@an0
Lösung:quelle
Ich habe diese Seite beim Entwerfen meiner App verwendet, die Bilder aufnimmt, und festgestellt, dass die folgende Methode die Ausrichtung korrigiert und weniger Speicher und Prozessor verbraucht als die vorherigen Antworten:
Dadurch werden die tatsächlichen Bilddaten lediglich neu ausgerichtet. Ich habe den Code von @ an0 verwendet, aber er erstellt ein neues Bild im Speicher, das ein 3264 x 2448-Bild belasten kann, das Sie möglicherweise von einer Kamera erhalten.
quelle
Wenn Sie die Bearbeitung aktivieren, wird das bearbeitete Bild (im Gegensatz zum Original) wie erwartet ausgerichtet:
Durch Aktivieren der Bearbeitung kann der Benutzer die Größe des Bilds ändern und es verschieben, bevor er auf "Foto verwenden" tippt.
quelle
Dies ist, was ich gefunden habe, um Orientierungsprobleme zu beheben
BEARBEITEN:
quelle
Update für Swift 3.1 basierend auf
Sourabh Sharma
der Antwort mit Code-Bereinigung.Beispiel für eine Picker-Delegatmethode:
quelle
Hier ist eine Lösung, die den Farbraum des Originalbilds nicht ändert . Wenn Sie die Ausrichtung eines Graustufenbilds normalisieren möchten, haben Sie bei allen Lösungen, die darauf basieren,
UIGraphicsBeginImageContextWithOptions
kein Glück, da dadurch ein Kontext im RGB-Farbraum erstellt wird. Stattdessen müssen Sie einen Kontext mit denselben Eigenschaften wie das Originalbild erstellen und zeichnen:quelle
Hier ist die UIImage-Erweiterung für Swift:
Basierend auf früheren Arbeiten von MetalHeart2003.
quelle
Hier ist eine UIImage-Erweiterung in Swift 2, die auf der akzeptierten Antwort von @Anomie basiert. Es wird ein klareres Schaltergehäuse verwendet. Dabei wird auch der von zurückgegebene optionale Wert
CGBitmapContextCreateImage()
berücksichtigt.quelle
Ich habe dieses Problem bei Bildern festgestellt, die von der Kamera aufgenommen oder in einer Kamerarolle gespeichert wurden und von der Kamera aufgenommen wurden. Bilder, die vom Safari-Browser in die Fotobibliothek heruntergeladen wurden, drehen sich beim Hochladen nicht.
Ich konnte dieses Problem lösen, indem ich die Bilddaten vor dem Hochladen als JPEG erstellte.
Wir können die Daten jetzt zum Hochladen verwenden und das Bild wird nach dem Hochladen nicht gedreht.
Hoffe das wird funktionieren.
quelle
Ich erreiche dies, indem ich unter ein paar Codezeilen schreibe
quelle
Wenn ich verstehe, möchten Sie die Ausrichtung des UIImage ignorieren? Wenn ja, dann könnten Sie dies tun: -
oder in Swift: -
Es hat mein Beschneidungsproblem gelöst. Hoffe, das ist was du suchst.
quelle
Swift 3-Version basierend auf @ jake1981, die es von @ MetalHeart2003 übernommen hat
quelle
quelle
Hier ist der Swift-4.2-Code zur automatischen Korrektur Ihrer Bildausrichtung. Gibt UIImage zurück
quelle
Ich habe dies in Xamarin umgesetzt:
quelle