【问题标题】:Problems with cropping a UIImage in Swift [duplicate]在 Swift 中裁剪 UIImage 的问题[重复]
【发布时间】:2017-01-11 15:38:46
【问题描述】:

我正在编写一个应用程序,它可以拍摄一张图片并裁剪除图片中心的一个矩形之外的所有内容。 (SWIFT) 我无法让裁剪功能工作。这就是我现在拥有的:

func cropImageToBars(image: UIImage) -> UIImage {
     let crop = CGRectMake(0, 200, image.size.width, 50)

     let cgImage = CGImageCreateWithImageInRect(image.CGImage, crop)
     let result: UIImage = UIImage(CGImage: cgImage!, scale: 0, orientation: image.imageOrientation)

     UIImageWriteToSavedPhotosAlbum(result, self, nil, nil)

     return result
  }

我查看了很多不同的指南,但似乎没有一个适合我。有时图像会旋转 90 度,我不知道为什么会这样。

【问题讨论】:

  • 欢迎加入 OverFlow。在您提出问题之前,请检查本网站上提供的有用信息。 stackoverflow.com/questions/158914/cropping-an-uiimage/…
  • 看起来像一个类似的问题,但我遇到了 Swift 的问题,而不是 Objective-C。
  • Swift 也有很多解决方案。这看起来最好:stackoverflow.com/a/30403863/661022
  • 感谢您的回答。如何在 Swift 中实现扩展?我假设你只是将它添加到你的主视图控制器类的末尾?
  • 这个问题比另一个问题有更多更好的答案。在另一个问题中发布“这个问题已经在这里有答案:”是公平的。

标签: ios swift uiimage crop


【解决方案1】:

如果您想使用扩展名,只需将其添加到文件的开头或结尾即可。您可以为此类代码创建一个额外的文件。

Swift 3.0

extension UIImage {
    func crop( rect: CGRect) -> UIImage {
        var rect = rect
        rect.origin.x*=self.scale
        rect.origin.y*=self.scale
        rect.size.width*=self.scale
        rect.size.height*=self.scale

        let imageRef = self.cgImage!.cropping(to: rect)
        let image = UIImage(cgImage: imageRef!, scale: self.scale, orientation: self.imageOrientation)
        return image
    }
}


let myImage = UIImage(named: "Name")
myImage?.crop(rect: CGRect(x: 0, y: 0, width: 50, height: 50))

用于裁剪图像的中心部分:

let imageWidth = 100.0
let imageHeight = 100.0
let width = 50.0
let height = 50.0
let origin = CGPoint(x: (imageWidth - width)/2, y: (imageHeight - height)/2)
let size = CGSize(width: width, height: height)

myImage?.crop(rect: CGRect(origin: origin, size: size))

【讨论】:

  • 我在最新的 Swift 3.0 中发布了这个例子。如果您使用旧版本,复制粘贴将需要一些更正。
  • 裁剪似乎有效,但我无法裁剪我真正想要的图像部分。例如,参数 (50,50,500,500) 从屏幕右上角返回图像的一部分,这对我来说毫无意义。如果我想在屏幕中间有一个矩形(有点像 imgur.com/a/vOMsb)矩形 args 应该是什么?
  • @KaviRamamurthy 我已经更新了我的答案。
  • 我试过了,它返回一个旋转的图像。有什么办法可以旋转回来?
  • 我没有测试过。旋转?诡异的。在这里您可以旋转图像。但我不确定我是否理解你。 stackoverflow.com/a/38678800/661022
猜你喜欢
  • 1970-01-01
  • 2011-02-08
  • 2015-06-30
  • 1970-01-01
  • 2012-05-20
  • 2010-09-14
  • 2013-01-15
  • 2019-10-13
  • 1970-01-01
相关资源
最近更新 更多