如何在Swift中裁剪UIImage?

时间:2016-09-01 23:57:57

标签: ios swift uiimage

我想在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

}

2 个答案:

答案 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 的演示项目,该项目展示了如何裁剪图像的某些部分。它有一个用户界面,可让用户选择图像的一部分。你的情况比较简单,但它应该给你一个想法。