Wie wird ein quadratischer Schnitt mit den Fotos in der Kamerarolle durchgeführt?

8

Ich möchte einige Bildfilterfunktionen auf dem iPhone wie Instagram ausprobieren. Ich verwende imagePickerController, um ein Foto von der Kamerarolle zu erhalten. Ich verstehe, dass das Image von imagePickerController reduziert wurde, um Speicher zu sparen. Und es ist nicht ratsam, das Originalbild in ein UII-Bild zu laden. Aber wie kann ich das Bild verarbeiten und es dann als Originalpixel speichern? Ich benutze iPhone 4S als mein Entwicklungsgerät.

Das Originalfoto in der Kamerarolle ist 3264 * 2448.

Die Bildrückgabe von UIImagePickerControllerOriginalImage ist 1920 * 1440

Das Bild, das von UIImagePickerControllerEditedImage zurückgegeben wird, ist 640 * 640

imageViewOld (verwenden Sie UIImagePickerControllerCropRect [80,216,1280,1280], um die Bildrückgabe nach UIImagePickerControllerOriginalImage zu beschneiden) ist 1280 * 1224

imageViewNew (verwenden Sie die doppelte Größe UIImagePickerControllerCropRect [80,216,2560,2560], um die Bildrückgabe nach UIImagePickerControllerOriginalImage zu beschneiden) ist 1840 * 1224.

Ich überprüfe das gleiche Foto von Instagram ist 1280 * 1280

Meine Fragen sind:

  1. Warum gibt UIImagePickerControllerOriginalImage das Foto "Original" nicht zurück? Warum wurde es auf 1920 * 1440 reduziert?
  2. Warum gibt UIImagePickerControllerEditedImage das Bild nicht um 1280 * 1280 zurück? Wie der
    UIImagePickerControllerCropRect zeigt, dass es um 1280 * 1280 Quadrat geschnitten ist?

  3. Wie kann ich ein quadratisches Bild zum Originalfoto als 2448 * 2448-Bild aufnehmen?

Vielen Dank im Voraus. Unten ist mein Code:

%Vor%     
user1486413 27.06.2012, 19:04
quelle

1 Antwort

12

Wie Sie gesehen haben, gibt der UIImagePickerController ein verkleinertes, bearbeitetes Bild zurück, manchmal 640x640, manchmal 320x320 (geräteabhängig).

Ihre Frage:

  

Wie kann ich ein quadratisches Schnittbild für ein 2448 * 2448 Bild machen?

Dazu müssen Sie zuerst UIImagePickerControllerCropRect verwenden, um ein neues Bild aus dem Originalbild zu erstellen, das Sie mit der UIImagePickerControllerOriginalImage -Taste des Info-Wörterbuchs erhalten haben. Mit der Quartz Core-Methode CGImageCreateWithImageInRect können Sie ein neues Bild erstellen, das nur die Pixel enthält, die durch das übergebene Rechteck begrenzt sind. in diesem Fall die Ernte rect. Sie müssen die Ausrichtung berücksichtigen, damit dies ordnungsgemäß funktioniert. Dann müssen Sie das Bild nur auf Ihre gewünschte Größe skalieren. Es ist wichtig zu beachten, dass das Crop-Rect relativ zum Originalbild ist, wenn es korrekt ausgerichtet wurde, nicht so, wie es aus der Kamera oder Foto-Bibliothek kommt. Aus diesem Grund müssen wir das Crop-Rect an die Ausrichtung anpassen, wenn wir die Quartz-Methoden zum Erstellen neuer Bilder usw. verwenden.

Ich habe Ihren Code oben genommen und eingerichtet, um ein 1280x1280 Bild aus dem Originalbild basierend auf dem Crop-Rect zu erstellen. Es gibt immer noch einige Randfälle, d. H. Unter Berücksichtigung, dass die Getreidestriche manchmal negative Werte haben können (der Code nimmt eine quadratische Beschneidungsrect an), die nicht adressiert wurden.

  1. Transformieren Sie zuerst das Crop-Rect, um die Ausrichtung des eingehenden Bildes und der Größe zu berücksichtigen. Diese transformCGRectForUIImageOrientation -Funktion stammt von NiftyBean
  2. Erstellen Sie ein Bild, das auf die transformierte Beschneidung zugeschnitten ist.
  3. Skalieren (und drehen) Sie das Bild auf die gewünschte Größe. d.h. 1280 × 1280.
  4. Erstellen Sie mit dem CGImage ein UI-Bild mit korrekter Skalierung und Ausrichtung.

Hier ist Ihr Code mit den Änderungen: AKTUALISIEREN Neuer Code wurde unten hinzugefügt, der sich um die fehlenden Fälle kümmern sollte.

%Vor%

}

%Vor%

AKTUALISIEREN Ich habe ein paar Methoden entwickelt, die sich um den Rest der Fälle kümmern werden. Die Schritte sind im Wesentlichen die gleichen, mit ein paar Modifikationen.

  1. Die erste Änderung besteht darin, den Kontext korrekt zu transformieren und zu skalieren, um die Ausrichtung des eingehenden Bildes zu handhaben,
  2. und das zweite ist, die nicht-quadratischen Ernten zu unterstützen, von denen Sie kommen können der Code%. In diesen Fällen ist das quadratische Bild gefüllt mit einer Farbe deiner Wahl.

Neuer Code

%Vor%     
Bill Wilson 28.06.2012, 02:40
quelle

Tags und Links