Ich habe mein Gesicht buchstäblich seit Tagen in dieses geschlagen und obwohl ich ständig das Gefühl habe, am Rande der Offenbarung zu stehen, kann ich mein Ziel einfach nicht erreichen.
Ich dachte im Voraus in den konzeptionellen Phasen meines Entwurfs, dass es eine triviale Angelegenheit wäre, ein Bild von der Kamera oder Bibliothek des iPhones aufzunehmen und es mit einer Funktion, die der Option „ Seitenfüllung “ von entspricht, auf eine bestimmte Höhe zu verkleinern UIImageView (vollständig im Code) und dann alles abschneiden , was nicht in ein übergebenes CGRect passt.
Das Originalbild von der Kamera oder Bibliothek zu erhalten, war trivial. Ich bin schockiert darüber, wie schwierig sich die beiden anderen Schritte erwiesen haben.
Das beigefügte Bild zeigt, was ich erreichen möchte. Wäre jemand bitte so freundlich, meine Hand zu halten? Jedes Codebeispiel, das ich bisher gefunden habe, scheint das Bild zu zerschlagen, auf dem Kopf zu stehen, wie Mist auszusehen, außerhalb der Grenzen zu zeichnen oder auf andere Weise einfach nicht richtig zu funktionieren.
quelle
Antworten:
Ich brauchte dasselbe - in meinem Fall, um die Dimension auszuwählen, die nach der Skalierung passt, und dann jedes Ende zuzuschneiden, um den Rest an die Breite anzupassen. (Ich arbeite im Querformat und habe daher möglicherweise keine Mängel im Hochformat festgestellt.) Hier ist mein Code - er ist Teil einer Kategorie auf UIImage. Die Zielgröße in meinem Code ist immer auf die Vollbildgröße des Geräts eingestellt.
quelle
Ein älterer Beitrag enthält Code für eine Methode zum Ändern der Größe Ihres UIImage. Der relevante Teil ist wie folgt:
Was das Zuschneiden betrifft, sollte das resultierende Bild, wenn Sie die Methode so ändern, dass für die Skalierung eine andere Größe als für den Kontext verwendet wird, an die Grenzen des Kontexts gekürzt werden.
quelle
originalImage
. Vielen Dank.UIGraphicsBeginImageContextWithOptions(newSize, 1.0f, 0.0f);
. (hier erklärt: stackoverflow.com/questions/4334233/… )Ich schlage diesen vor. Ist sie nicht eine Schönheit? ;)
quelle
Es gibt einen großartigen Code, der sich auf die Größenänderung von Bildern und verschiedene andere Vorgänge bezieht. Ich bin um dieses Problem herumgekommen, als ich versucht habe, die Größe von Bildern zu ändern ... http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
quelle
Bitte schön. Dieser ist perfekt ;-)
BEARBEITEN: siehe unten Kommentar - "Funktioniert nicht mit bestimmten Bildern, schlägt fehl mit: CGContextSetInterpolationQuality: ungültiger Kontext 0x0 Fehler"
quelle
Dies ist eine Version der Antwort von Jane Sales in Swift. Prost!
quelle
Ich habe Brad Larsons Code geändert. Es wird das Bild in einem bestimmten Rechteck füllen.
quelle
Die Xamarin.iOS-Version für akzeptierte Antworten zum Ändern der Größe und anschließenden Zuschneiden von UIImage (Aspect Fill) finden Sie unten
quelle
Ich habe Sam Wirchs Leitfaden auf schnell umgestellt und es hat gut für mich funktioniert, obwohl das endgültige Bild ein leichtes "Quetschen" enthält, das ich nicht lösen konnte.
Wenn jemand die objektive c-Version haben möchte, ist sie auf seiner Website.
quelle
Ich habe festgestellt, dass der Swift 3 von Evgenii Kanvets das Bild nicht einheitlich skaliert.
Hier ist meine Swift 4-Version der Funktion, die das Bild nicht zerquetscht:
quelle
UIGraphicsBeginImageContextWithOptions
aber andere funktionierten perfekt. Vielen Dank!Der folgende einfache Code hat bei mir funktioniert.
quelle
UIImageView
Objekte. Bei dieser Frage geht es jedoch um die Skalierung desUIImage
Objekts selbst.Dann können Sie auf diese Weise Screenshots zu Ihrem Bild machen
quelle
Unter dem Arbeitsbeispiel: Linkes Bild - (Ursprungsbild); Rechtes Bild mit Maßstab x2
Wenn Sie das Bild skalieren möchten, aber den Rahmen (Proportionen) beibehalten möchten, rufen Sie die Methode folgendermaßen auf:
quelle
Diese Frage scheint zur Ruhe gekommen zu sein, aber auf meiner Suche nach einer Lösung, die ich leichter verstehen konnte (und die in Swift geschrieben wurde), bin ich zu dieser Frage gekommen (auch gepostet unter: Wie man das UIImage beschneidet? )
Ich wollte in der Lage sein, aus einer Region basierend auf einem Seitenverhältnis zu beschneiden und auf eine Größe zu skalieren, die auf einem Ausmaß der äußeren Begrenzung basiert. Hier ist meine Variation:
Es gibt ein paar Dinge, die ich verwirrend fand, die getrennten Probleme beim Zuschneiden und Ändern der Größe. Das Zuschneiden wird mit dem Ursprung des Rect behandelt, das Sie an drawInRect übergeben, und das Skalieren wird durch den Größenbereich behandelt. In meinem Fall musste ich die Größe des Zuschneide-Rechtecks auf der Quelle mit meinem Ausgangs-Rechteck mit demselben Seitenverhältnis in Beziehung setzen. Der Skalierungsfaktor wird dann ausgegeben / eingegeben und muss auf drawRect angewendet werden (an drawInRect übergeben).
Eine Einschränkung besteht darin, dass bei diesem Ansatz effektiv davon ausgegangen wird, dass das von Ihnen gezeichnete Bild größer als der Bildkontext ist. Ich habe dies nicht getestet, aber ich denke, Sie können diesen Code zum Zuschneiden / Zoomen verwenden, aber den Skalierungsparameter explizit als den oben genannten Skalierungsparameter definieren. Standardmäßig wendet UIKit einen Multiplikator an, der auf der Bildschirmauflösung basiert.
Schließlich sollte angemerkt werden, dass dieser UIKit-Ansatz höher ist als die CoreGraphics / Quartz- und Core Image-Ansätze und Probleme mit der Bildorientierung zu behandeln scheint. Es ist auch erwähnenswert, dass es nach ImageIO ziemlich schnell ist, laut diesem Beitrag hier: http://nshipster.com/image-resizing/
quelle
Schnelle Version:
quelle
Hier ist eine Swift 3-Version von Sam Wirchs Swift -Leitfaden von William T.
quelle