Cortar a interface do usuário
Recebo imagens com resolução de 1920x1080. Estou tentando recortá-los na área central do quadrado (ou seja, 1080x1080 no centro). A resolução pode mudar no futuro. Seria possível cortar a imagem dessa maneira? Tentei algumas coisas postadas no SO, mas sempre recebo uma imagem de 660x1080 se tentar recortar e centralizar. Aqui está uma imagem representando o que eu quero alcançar.
Basicamente, o vermelho é original, o verde é o que eu quero e o amarelo está apenas mostrando as linhas mixX e midY.
O código que eu tentei.
func imageByCroppingImage(image: UIImage, toSize size: CGSize) -> UIImage{
let newCropWidth: CGFloat?
let newCropHeight: CGFloat?
if image.size.width < image.size.height {
if image.size.width < size.width {
newCropWidth = size.width
} else {
newCropWidth = image.size.width
}
newCropHeight = (newCropWidth! * size.height) / size.width
} else {
if image.size.height < size.height {
newCropHeight = size.height
} else {
newCropHeight = image.size.height
}
newCropWidth = (newCropHeight! * size.width) / size.height
}
let x = image.size.width / 2.0 - newCropWidth! / 2.0
let y = image.size.height / 2.0 - newCropHeight! / 2.0
let cropRect = CGRect(x: x, y: y, width: newCropWidth!, height: newCropHeight!)
let imageRef = image.cgImage!.cropping(to: cropRect)
let cropped = UIImage(cgImage: imageRef!, scale: 1.0, orientation: .right)
return cropped
}
E então passo esse método como CGSize (1080, 1080). Recebo uma imagem de 660, 1080. Alguma idéia?
A intenção é cortar a imagem, não apenas exibi-la centralizada.