【问题标题】:UIImage resizing scaleUIImage 调整大小
【发布时间】:2018-03-17 10:19:50
【问题描述】:

我有这样的图像:

我想将此图像调整为特定宽度:假设为 200 像素,高度也应该计算在内。 (因此图像应保持其宽度到高度的比例)

这就是我目前得到的全部:

extension UIImage {
    func resize(newSize1: CGSize) -> UIImage {
        let size = self.size
        let widthRatio  = newSize1.width  / size.width
        let heightRatio = newSize1.height / size.height

        var newSize2: CGSize
        if(widthRatio > heightRatio) {
            newSize2 = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
        } else {
            newSize2 = CGSize(width: size.width * widthRatio,  height: size.height * widthRatio)
        }
        let rect = CGRect(x: 0, y: 0, width: newSize2.width, height: newSize2.height)
        UIGraphicsBeginImageContextWithOptions(newSize2, false, 1.0)
        self.draw(in: rect)
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage2!
    }
}

但该函数采用CGSize 大小参数(宽度和高度),但我只想获得一个采用宽度参数的函数。

如何编辑我的代码来解决我的问题?
任何帮助将不胜感激:)

注意:UIImage 应该获得更小的分辨率(更少的像素),而不是 Image View 本身!

【问题讨论】:

    标签: ios swift uiimageview uiimage


    【解决方案1】:

    对于 Swift 4 和 Swift 3,使用下面的 UIImage 扩展来调整图像大小。它是根据给定的宽度计算高度的。

    extension UIImage {
        func resized(toWidth width: CGFloat) -> UIImage? {
            let canvasSize = CGSize(width: width, height: CGFloat(ceil(width/size.width * size.height)))
            UIGraphicsBeginImageContextWithOptions(canvasSize, false, scale)
            defer { UIGraphicsEndImageContext() }
            draw(in: CGRect(origin: .zero, size: canvasSize))
            return UIGraphicsGetImageFromCurrentImageContext()
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以根据图像的宽度和纵横比计算所需的高度。这同样适用于高度参数。这是UIImage的扩展示例。

      extension UIImage {
      func resize(width: CGFloat) -> UIImage {
          let height = (width/self.size.width)*self.size.height
          return self.resize(size: CGSize(width: width, height: height))
      }
      
      func resize(height: CGFloat) -> UIImage {
          let width = (height/self.size.height)*self.size.width
          return self.resize(size: CGSize(width: width, height: height))
      }
      
      func resize(size: CGSize) -> UIImage {
          let widthRatio  = size.width/self.size.width
          let heightRatio = size.height/self.size.height
          var updateSize = size
          if(widthRatio > heightRatio) {
              updateSize = CGSize(width:self.size.width*heightRatio, height:self.size.height*heightRatio)
          } else if heightRatio > widthRatio {
              updateSize = CGSize(width:self.size.width*widthRatio,  height:self.size.height*widthRatio)
          }
          UIGraphicsBeginImageContextWithOptions(updateSize, false, UIScreen.main.scale)
          self.draw(in: CGRect(origin: .zero, size: updateSize))
          let newImage = UIGraphicsGetImageFromCurrentImageContext()
          UIGraphicsEndImageContext()
          return newImage!
      }
      

      }

      【讨论】:

      • 这不是真的工作(不保持比例因子!)
      猜你喜欢
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 2012-07-08
      • 2013-06-22
      • 1970-01-01
      • 2013-01-16
      相关资源
      最近更新 更多