обрезать заданную c область изображения в быстрой - PullRequest
0 голосов
/ 29 февраля 2020

Я создаю приложение, в котором можно обрезать несколько изображений до одного указанного c размера.

У меня есть массив с несколькими изображениями. Изображения массива были отображены в виде, где я могу перетащить их внутрь вида. Я использую одно и то же изображение дважды. Это выглядит так:

enter image description here

У меня также есть вид обрезки (отображается красным только для демонстрации). Изображения должны быть обрезаны до размера обрезки:

enter image description here

Конечный результат выглядит следующим образом:

enter image description here

Было несколько проблем. Я не понимаю, почему изображение поворачивается. Также кажется, что изображение не обрезано до созданного мной вида обрезки (красный вид). Также изображения должны иметь небольшую задержку, потому что я перетаскиваю каждое из них в другое место в представлении.

Метод, который я использую, взят из документации на яблоки:

let cropRect = CGRect(x: cropView.frame.origin.x, y: cropView.frame.origin.y, width: cropView.frame.width, height: cropView.frame.height)

        let croppedImage = ImageCrophandler.sharedInstance.cropImage(imageContentView[i].image!, toRect: cropRect, viewWidth: cropView.frame.width, viewHeight: cropView.frame.height)

        print(croppedImage)

        arrayOfCropedImages.append(croppedImage!)

    func cropImage(_ inputImage: UIImage, toRect cropRect: CGRect, viewWidth: CGFloat, viewHeight: CGFloat) -> UIImage? {
    let imageViewScale = max(inputImage.size.width / viewWidth,
                             inputImage.size.height / viewHeight)

    // Scale cropRect to handle images larger than shown-on-screen size
    let cropZone = CGRect(x:cropRect.origin.x * imageViewScale,
                          y:cropRect.origin.y * imageViewScale,
                          width:cropRect.size.width * imageViewScale,
                          height:cropRect.size.height * imageViewScale)

    // Perform cropping in Core Graphics
    guard let cutImageRef: CGImage = inputImage.cgImage?.cropping(to:cropZone)
    else {
        return nil
    }

    // Return image to UIImage
    let croppedImage: UIImage = UIImage(cgImage: cutImageRef)


    return croppedImage
}
...