У меня есть сценарий, в котором я беру исходное изображение, обрезаю его на два разных раздела, а затем переворачиваю эти разделы и собираю обратно. (Сверху становится снизу, а снизу потому что сверху). Проблема в том, что когда я делаю это, некоторые изображения, которые используются для создания нового изображения, в порядке, а другие делятся неправильно, потому что изображение в какой-то момент поворачивается. Я не уверен, что создает проблему или как ее решить. Вот несколько примеров.
пример рабочего изображения: Исходное изображение
разбитое изображение пример:
Во втором примере изображение перевернуто, а в некоторых другие сценарии 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 меня немного смущает.