专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构

照片选择器缩放图片

  • 有些图片非常大,比如系统提供的图片.显示的图片太大,内存消耗很多,程序没有必要显示那么大的图片,新浪服务器仅支持图片小于5M.因此将选择的图片等比例缩小
  • 新建 UIImage 的扩展
    // MARK: - UIImage扩展,等比例缩小图片到指定的宽度
    extension UIImage {
    //
    }
    
  • UIImage 的扩展 定义 scaleImage 等比例缩小图片到指定的宽度

    // MARK: - UIImage扩展,等比例缩小图片到指定的宽度
    extension UIImage {
    
      /**
       等比例缩小图片到指定的宽度
       - parameter newWidth: 缩放后的宽度
       */
      func scaleImage(newWidth: CGFloat = 300) -> UIImage {
          // 如果图片宽度小于 newWidth, 直接返回
          if size.width < newWidth {
              return self
          }
    
          // 计算缩放好后的高度
          // newHeight / newWidth = height / width
          let newHeight = newWidth * size.height / size.width
    
          let newSize = CGSize(width: newWidth, height: newHeight)
    
          // 将图片等比例缩放到 newSize
    
          // 开启图片上下文
          UIGraphicsBeginImageContext(newSize)
    
          // 绘图
          draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize))
    
          // 获取绘制好的图片
          let newImage = UIGraphicsGetImageFromCurrentImageContext()
    
          // 关闭绘图上下文
          UIGraphicsEndImageContext()
    
          // 返回绘制好的新图
          return newImage!
      }
    }
    
  • 在获取到选择的图片时,将图片缩小

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
      let image = info[UIImagePickerControllerOriginalImage] as! UIImage
    
      let newImage = image.scaleImage()
      // 将选中的图片添加到图片数组
      photos.append(newImage)
    
      // collectionView 刷新数据
      collectionView?.reloadData()
    
      picker.dismiss(animated: true, completion: nil)
    }
    

results matching ""

    No results matching ""