Ich bin auf der Suche nach einer Lösung, um eine UIView (mit ihren Unteransichten) zu speichern, die als Bild in der Fotobibliothek der Geräte gespeichert wird. Ich möchte, dass die Größe des Ausgabebildes 1024 x 1024 ist. Die UIView wird immer ein Quadrat sein, so dass Subviews in das Quadrat passen. Die resultierende gespeicherte Ausgabe muss diese Anforderungen erfüllen.Skalierung von Ansicht und Bild mit UIGraphicsBeginImageContextWithOptions
Hier ist, was ich habe:
let outputSize = CGSize(width: 1024.0, height: 1024.0)
func imageWithView(view: UIView) -> UIImage {
UIGraphicsBeginImageContextWithOptions(outputSize, view.opaque, 0.0)
view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: false)
let outputImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return outputImage
}
Die Ansicht, die ich in den Parameter oben am Übergang der Blick auf den Platz ist. Der Screenshot unten ist das Ergebnis:
In meinem Drehbuch, die UIView Platz ist bei 280x280 (wenn das einen Unterschied macht.) Mein gewünschtes Ergebnis ist die UIView (und innerhalb Foto davon) gespeichert wird die Vollgröße des schwarzen Rahmens (1024 Quadrat). Danke für die Hilfe.
bearbeiten
Hier ist eine aktualisierte Version: Während es die Bedürfnisse der Ausgabe der Blick auf 1024 Quadrat erfüllt, die Qualität ist nicht sehr wünschenswert ist. Möchten die CGBitmapContextCreate & CGContextDrawImage Methode hier besprochen verwenden: http://nshipster.com/image-resizing/
func stackOverflow() -> UIImage{
let hasAlpha = false
let scale: CGFloat = 1.0
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1024.0, 1024.0), !hasAlpha, scale)
mainView.drawViewHierarchyInRect(CGRect(origin: CGPointZero, size: CGSizeMake(1024.0, 1024.0)), afterScreenUpdates: false)
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return scaledImage
}
Überprüfen Sie meine Bearbeitung oben. Ich musste ein paar Dinge anpassen, damit es mit meinen Bedürfnissen zusammenpasst. Während das endgültige Bild auf 1024 Quadrat exportiert wird, ist die Bildqualität nicht sehr wünschenswert. Der von Ihnen bereitgestellte NSHipster-Link sieht aus wie eine robustere Lösung mit: CGBitmapContextCreate & CGContextDrawImage - dies ermöglicht mir, die Qualität mit CGInterpolationQuality anzugeben. Ich habe Schwierigkeiten damit, das UIView und seine Subviews zu exportieren, da es nach einem CGImage-Argument sucht. Können Sie mir Tipps geben, wie Sie diese für meine oben genannten Anforderungen nutzen können? Vielen Dank. – Joe
Was passiert eigentlich? Sie können das UIImage nicht in CGImage konvertieren oder was? Sie können das mit 'UIImage (Name:" Something ")?. CGImage' machen und den Rest der Prozedur dort befolgen. – Dershowitz123
Ich habe die UIImage als CGImage gecastet, also funktioniert das gut. Das Problem besteht darin, die quadratische UIView in die Methode einzufügen. Ich glaube, dass es in CGContextDrawImage oder CGBitmapCreateImage hinzugefügt werden muss, aber nichts, das ich versuchte, produzierte irgendwelche würdigen Resultate. – Joe