Camera Image Crop

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Camera Image Crop

    Hallo,

    aktuell arbeite ich daran, Bilder die mit der Kamera gemacht wurden oder bereits in der Library vorhanden sind, im nachinein zuzuschneiden. Dafür lasse ich die Bilder in einer ScrollView erscheinen, so das man schön zoomen kann und sich das Bild hinziehen kann wie man möchte. So weit so gut, dass funktioniert mit den Bildern aus der eigenen Library auch einwandfrei. Die Kamera Bilder machen mir aber aus irgendeinem Grund Probleme, da das Bild nicht wie gewünscht zugeschnitten wird. Die Bilder werden zwar in irgendeiner Form zugeschnitten, aber besitzen dabei ein ganz anderes Verhalten als die Bilder in der Library.
    Bspw. wird nicht der ausgewählte Blickpunkt zugeschnitten sondern mal ein bisschen zu weit rechts/links/oben/unten.

    Jetzt frage ich mich was der Unterschied zwischen den Bildern aus der Library ist und den Bildern direkt von der Kamera. Hat da jemand Erfahrungen mit ?

    Dazu sei gesagt das die Bilder die mit der Kamera gemacht werden, quadratische Maße besitzen.

    Hier noch der Code mit dem ich alles mache:

    Quellcode

    1. let cropRect = CGRect(x: viewToCrop.frame.origin.x - questionImageView.realImageRect().origin.x,
    2. y: viewToCrop.frame.origin.y - questionImageView.realImageRect().origin.y,
    3. width: viewToCrop.frame.width,
    4. height: viewToCrop.frame.height)
    5. let croppedImage = cropImage(imageToCrop,toRect: cropRect, viewWidth: questionImageView.frame.width, viewHeight: questionImageView.frame.height)
    6. func cropImage(_ inputImage: UIImage, toRect cropRect: CGRect, viewWidth: CGFloat, viewHeight: CGFloat) -> UIImage?
    7. {
    8. let imageViewScale = max(inputImage.size.width / viewWidth,
    9. inputImage.size.height / viewHeight)
    10. // Scale cropRect to handle images larger than shown-on-screen size
    11. let cropZone = CGRect(x:cropRect.origin.x * imageViewScale,
    12. y:cropRect.origin.y * imageViewScale,
    13. width:cropRect.size.width * imageViewScale,
    14. height:cropRect.size.height * imageViewScale)
    15. // Perform cropping in Core Graphics
    16. guard let cutImageRef: CGImage = inputImage.cgImage?.cropping(to:cropZone)
    17. else {
    18. return nil
    19. }
    20. // Return image to UIImage
    21. let croppedImage: UIImage = UIImage(cgImage: cutImageRef, scale: inputImage.scale, orientation: inputImage.imageOrientation)
    22. return croppedImage
    23. }
    24. }
    25. extension UIImageView {
    26. // MARK: - Methods
    27. func realImageRect() -> CGRect {
    28. let imageViewSize = self.frame.size
    29. let imgSize = self.image?.size
    30. guard let imageSize = imgSize else {
    31. return CGRect.zero
    32. }
    33. let scaleWidth = imageViewSize.width / imageSize.width
    34. let scaleHeight = imageViewSize.height / imageSize.height
    35. let aspect = fmin(scaleWidth, scaleHeight)
    36. var imageRect = CGRect(x: 0, y: 0, width: imageSize.width * aspect, height: imageSize.height * aspect)
    37. // Center image
    38. imageRect.origin.x = (imageViewSize.width - imageRect.size.width) / 2
    39. imageRect.origin.y = (imageViewSize.height - imageRect.size.height) / 2
    40. // Add imageView offset
    41. imageRect.origin.x += self.frame.origin.x
    42. imageRect.origin.y += self.frame.origin.y
    43. print("test\(imageRect)")
    44. return imageRect
    45. }
    46. }
    Alles anzeigen