问题
I am working with Swift 2.0 and I would like to split an image into multiple pieces. I know this is a repeat, but they syntax is old and I am having trouble update.
回答1:
update: Xcode 8.2.1 • Swift 3.0.2
You can add this extension to split your images:
extension UIImage {
var topHalf: UIImage? {
guard let image = cgImage?
.cropping(to: CGRect(origin: .zero,
size: CGSize(width: size.width,
height: size.height / 2 )))
else { return nil }
return UIImage(cgImage: image, scale: 1, orientation: imageOrientation)
}
var bottomHalf: UIImage? {
guard let image = cgImage?
.cropping(to: CGRect(origin: CGPoint(x: 0,
y: size.height - (size.height/2).rounded()),
size: CGSize(width: size.width,
height: size.height -
(size.height/2).rounded())))
else { return nil }
return UIImage(cgImage: image)
}
var leftHalf: UIImage? {
guard let image = cgImage?
.cropping(to: CGRect(origin: .zero,
size: CGSize(width: size.width/2,
height: size.height)))
else { return nil }
return UIImage(cgImage: image)
}
var rightHalf: UIImage? {
guard let image = cgImage?
.cropping(to: CGRect(origin: CGPoint(x: size.width - (size.width/2).rounded(), y: 0),
size: CGSize(width: size.width - (size.width/2).rounded(),
height: size.height)))
else { return nil }
return UIImage(cgImage: image)
}
}
Playground testing:
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let imgURL = URL(string: "https://i.stack.imgur.com/Xs4RX.jpg")!
URLSession.shared.dataTask(with: imgURL) { data, response, error in
guard
let data = data, let image = UIImage(data: data)
else { return }
let topHalf = image.topHalf
let bottomHalf = image.bottomHalf
let topLeft = topHalf?.leftHalf
let topRight = topHalf?.rightHalf
let bottomLeft = bottomHalf?.leftHalf
let bottomRight = bottomHalf?.rightHalf
}.resume()
来源:https://stackoverflow.com/questions/33090812/xcode-swift-how-do-i-split-an-image