Ориентация изображения испортилась при создании нового изображения - PullRequest
0 голосов
/ 29 марта 2020

У меня есть сценарий, в котором я беру исходное изображение, обрезаю его на два разных раздела, а затем переворачиваю эти разделы и собираю обратно. (Сверху становится снизу, а снизу потому что сверху). Проблема в том, что когда я делаю это, некоторые изображения, которые используются для создания нового изображения, в порядке, а другие делятся неправильно, потому что изображение в какой-то момент поворачивается. Я не уверен, что создает проблему или как ее решить. Вот несколько примеров.

пример рабочего изображения: Исходное изображение

original image

new image (top is bottom and bottom is top)

разбитое изображение пример:

original image

new image, incorrect (the image is upside down)

Во втором примере изображение перевернуто, а в некоторых другие сценарии ios разделение пополам происходит в другой ориентации, потому что изображение поворачивается на 90 градусов, прежде чем разделение происходит в некоторой точке.

Код, который выполняет это разбиение изображения, приведен ниже:

//convert UIImage to CGImage
        let ciImage = CIImage(image: currentImage!.image!)
        let context = CIContext(options: nil)
        let cgImage = context.createCGImage(ciImage!, from: CGRect(origin: .zero, size: CGSize(width: imageWidth, height: imageHeight)))

        let imageCreated = splitImage(image: cgImage!)

   func splitImage (image: CGImage) -> Bool {

        let tH = image.cropping(to: CGRect(
                   origin: .zero,
                   size: CGSize(width: CGFloat(image.width) , height: CGFloat(image.height / 2))))
        let topHalf = UIImage(cgImage: tH!)

        let bH = image.cropping(to: CGRect(
                  origin: CGPoint(x: 0, y: image.height - (image.height / 2)),
                  size: CGSize(width: CGFloat(image.width) , height: CGFloat(image.height - (image.height / 2)) )))
        let bottomHalf = UIImage(cgImage: bH!)


        //assemble new layout
        let renderer = UIGraphicsImageRenderer(size: CGSize(width: currentImage!.image!.size.width, height: currentImage!.image!.size.height))
        let img = renderer.image {ctx in

        //becomes bottom half
        topHalf.draw(in: CGRect(
            x: CGFloat(0),
            y: CGFloat(image.height - (image.height / 2)),
            width: CGFloat(image.width),
            height: CGFloat(image.height / 2)))

        //become top half
        bottomHalf.draw(in: CGRect(
            x: CGFloat(0),
            y: CGFloat(0),
            width: CGFloat(image.width),
            height: CGFloat(image.height / 2)))
        }

        currentImage!.image = img        
        return true
    }

Любые рекомендации или помощь по этому вопросу будут оценены, так как другие ответы касаются полностью обрезанного изображения, но на самом деле ничего связанных с разрывом изображения на части и соединением, которое я видел. Я также довольно новичок в Swift, но документация по CGImage, CIImage и UIImage меня немного смущает.

...