webentwicklung-frage-antwort-db.com.de

Wie kann ich mit Swift einen Teil eines Bildes auswählen, zuschneiden und speichern?

Ich versuche, eine iOS-App mit Swift zu erstellen, um Bilder aufzunehmen und den Benutzer einen ausgewählten Teil des Bildes speichern zu lassen. In vielen auf Nocken basierenden Apps ist mir aufgefallen, dass ein rechteckiger Rahmen angeboten wird, damit die Benutzer den gewünschten Anteil auswählen können. Dazu müssen Sie entweder die Kanten des Rechtecks ​​verschieben oder die Ecken entsprechend dem gewünschten Bereich verschieben.

Könnten Sie mich bitte anleiten, wie Sie das bewegliche Rechteck implementieren und nur den Bildausschnitt speichern können?

16
Sriram

Eine weitere Lösung gefunden. Diesmal ist es in Swift. Die Lösung sieht elegant aus und der Code im Vergleich zu anderen derartigen Lösungen ist in weniger Zeilen geschrieben.

Hier ist es .. https://github.com/DuncanMC/CropImg Vielen Dank an Duncan Champney, der seine Arbeit für Github zur Verfügung gestellt hat.

10
Sriram

Mit Swift 3

Das Beschneiden von Bildern kann mit CGImages from CoreGraphics erfolgen.

Holen Sie sich die CGImage-Version eines UIImage wie folgt:

// cgImage is an attribute of UIImage
let cgImage = image.cgImage

CGImage-Objekte haben eine Methodecropping (an: CGRect), die den Cropping vornimmt:

let croppedCGImage: CGImage = cgImage.cropping(to: toRect)

Zum Schluss konvertieren Sie wieder von CGImage nach UIImage :

let uiImage = UIImage(cgImage: croppedCGImage)

Beispielfunktion:

func cropImage(image: UIImage, toRect: CGRect) -> UIImage? {
    // Cropping is available trhough CGGraphics
    let cgImage :CGImage! = image.cgImage
    let croppedCGImage: CGImage! = cgImage.cropping(to: toRect)

    return UIImage(cgImage: croppedCGImage)
}

Das CGRect-Attribut für das Beschneiden definiert das 'Beschnittrechteck' im Bild, das beschnitten werden soll.

26
Paulo

https://github.com/myang-git/iOS-Image-Crop-View macht so etwas wie Sie suchen .. 

Hoffe das hilft.

7
Subbu

Wenn Sie nach dem Zuschneiden des Bildes ein Problem wie Drehen von 90 erhalten, versuchen Sie es hier.
Speichern Sie den ursprünglichen Bildmaßstab und die Ausrichtungseigenschaft für eine spätere Verwendung

let imgOrientation = image?.imageOrientation
let imgScale = image?.scale

Holen Sie sich das CGImage von UIImage:

let cgImage = image.cgImage

Übergeben Sie den zu beschneidenden cropArea-Bereich (CGRect-Bereich) (sofern Sie imageView.image verwenden, finden Sie den Maßstab und rechnen Sie mit cgRect nach). Fügen Sie diesen Code bei Bedarf hinzu

let croppedCGImage = cgImage.cropping(to: cropArea)
let coreImage = CIImage(cgImage: croppedCGImage!)

Sie benötigen einen Kontext für das Rendern eines Bildes (es ist ein schwerer Prozess, überprüfen Sie https://developer.Apple.com/documentation/coreimage/cicontext , wenn Sie es mehrmals tun). Hiermit können Sie den Maßstab und die Ausrichtung festlegen, in denen wir erstellt wurden erste Zeile, also Bild nicht 90 drehen

let ciContext = CIContext(options: nil)
let filteredImageRef = ciContext.createCGImage(coreImage, from: coreImage.extent)
let finalImage = UIImage(cgImage:filteredImageRef!, scale:imgScale!, orientation:imgOrientation!)
imageView.image = finalImage
0
Iraniya Naynesh