title: How to get Image extension/format from UIImage in swift?
body: <p>I am trying to upload an image to my server, but before uploading, i need to check whether it is valid format or not.</p>
  <p>let say i only want <code>.jpeg</code> and <code>.png</code> only, so if the users pick <code>.gif</code> format image from their phone, I will show some alert.</p>
  <p>I get the image from the user gallery/camera, and then I want to check the format, but I don't know how to check the format</p>
  <pre><code>@IBAction func selectPictureButtonDidPressed(_ sender: Any) {
      let imagePickerController = UIImagePickerController()
      imagePickerController.delegate = self
      imagePickerController.allowsEditing = true
      
      let actionSheet = UIAlertController(title: &quot;Photo Source&quot;, message: &quot;please choose your source&quot;, preferredStyle: .actionSheet)
      
      // action camera
      let actionCamera = UIAlertAction(title: &quot;Camera&quot;, style: .default) { (action) in
          if UIImagePickerController.isSourceTypeAvailable(.camera) {
              imagePickerController.sourceType = .camera
              self.present(imagePickerController, animated: true, completion: nil)
          } else {
              self.showAlert(alertTitle: &quot;Opppss&quot;, alertMessage: &quot;camera can't be used / not available&quot;, actionTitle: &quot;OK&quot;)
              print(&quot;camera can't be used / not available&quot;)
          }
      }
      
      // action photo library
      let actionPhotoLibrary = UIAlertAction(title: &quot;Photo Library&quot;, style: .default) { (action) in
          imagePickerController.sourceType = .photoLibrary
          self.present(imagePickerController, animated: true, completion: nil)
      }
      
      //action cancel
      let actionCancel = UIAlertAction(title: &quot;Cancel&quot;, style: .cancel, handler: nil)
      
      actionSheet.addAction(actionCamera)
      actionSheet.addAction(actionPhotoLibrary)
      actionSheet.addAction(actionCancel)
      
      self.present(actionSheet, animated: true, completion: nil)
  }
  
  func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
      let image = info[UIImagePickerControllerOriginalImage] as! UIImage
      postImage.image = image
      picker.dismiss(animated: true, completion: nil)
      
      doesItHasImage = true
  }
  
  func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
      picker.dismiss(animated: true, completion: nil)
  }
  </code></pre>
  <p>How do I check that format?</p>
  <p>i have tried to find on google, but I just get the image format if it is derived from an URL. not directly from UIImage like this</p>
  <pre><code>import UIKit
  import ImageIO
  
  struct ImageHeaderData{
      static var PNG: [UInt8] = [0x89]
      static var JPEG: [UInt8] = [0xFF]
      static var GIF: [UInt8] = [0x47]
      static var TIFF_01: [UInt8] = [0x49]
      static var TIFF_02: [UInt8] = [0x4D]
  }
  
  enum ImageFormat{
      case Unknown, PNG, JPEG, GIF, TIFF
  }
  
  extension NSData{
      var imageFormat: ImageFormat{
          var buffer = [UInt8](repeating: 0, count: 1)
          self.getBytes(&amp;buffer, range: NSRange(location: 0,length: 1))
          if buffer == ImageHeaderData.PNG
          {
              return .PNG
          } else if buffer == ImageHeaderData.JPEG
          {
              return .JPEG
          } else if buffer == ImageHeaderData.GIF
          {
              return .GIF
          } else if buffer == ImageHeaderData.TIFF_01 || buffer == ImageHeaderData.TIFF_02{
              return .TIFF
          } else{
              return .Unknown
          }
      }
  }
  
  // USAGE
  let imageURLFromParse = NSURL(string : &quot;https://i.stack.imgur.com/R64uj.jpg&quot;)
  let imageData = NSData(contentsOf: imageURLFromParse! as URL)
  print(imageData!.imageFormat)
  </code></pre>