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:
Warum gibt UIImagePickerControllerEditedImage das Bild nicht um 1280 * 1280 zurück? Wie der
UIImagePickerControllerCropRect zeigt, dass es um 1280 * 1280 Quadrat geschnitten ist?
Wie kann ich ein quadratisches Bild zum Originalfoto als 2448 * 2448-Bild aufnehmen?
Vielen Dank im Voraus. Unten ist mein Code:
%Vor%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.
transformCGRectForUIImageOrientation
-Funktion stammt von NiftyBean
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.
Neuer Code
%Vor%