我想在Swift中编写一个函数,它可以拍摄一张图像并将除了中间的细水平外的所有内容裁剪掉。我不想保留宽高比。
这是我到目前为止所做的,但它并没有按我想要的方式工作。我想只保留y = 276到y = 299的像素。
func cropImageToBars(image: UIImage) -> UIImage {
let rect = CGRectMake(0, 200, image.size.width, 23)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 1.0)
image.drawInRect(rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
答案 0 :(得分:1)
这个怎么样
func cropImageToBars(image: UIImage) -> UIImage {
let rect = CGRectMake(0, 200, image.size.width, 23)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
defer{
UIGraphicsEndImageContext()
}
flipContextVertically(rect.size)
let cgImage = CGImageCreateWithImageInRect(image.CGImage, rect)!
return UIImage(CGImage: cgImage)
}
func flipContextVertically(contentSize:CGSize){
var transform = CGAffineTransformIdentity
transform = CGAffineTransformScale(transform, 1, -1)
transform = CGAffineTransformTranslate(transform, 0, -contentSize.height)
CGContextConcatCTM(UIGraphicsGetCurrentContext(), transform)
}
编辑翻转CG坐标以匹配UIKit。
答案 1 :(得分:1)
您的代码向后执行此操作。 UIImage drawInRect()方法将整个图像绘制到目标矩形中。可以把它想象成电影放大器或幻灯片放映机。您可以调整渲染图像的框的大小和形状。您设置了一个图像上下文,就像一部电影,可以捕捉到一些图像。
您通常希望将图像渲染为图像的完整大小的矩形,并将其原点移动,以使原点为0的图像上下文捕获图像的所需位。
我有一个名为 CropImg 的演示项目,该项目展示了如何裁剪图像的某些部分。它有一个用户界面,可让用户选择图像的一部分。你的情况比较简单,但它应该给你一个想法。