2017-12-21 172 views
-1

私は自分のサーバーに画像をアップロードしようとしていますが、アップロードする前に有効な形式かどうかを確認する必要があります。すぐにUIImageからイメージの拡張子/フォーマットを取得する方法

私はただ.jpegと.pngだけを望んでいるとしましょう。ユーザーが携帯電話から.gif形式の画像を選択した場合、警告が表示されます。

私は、ユーザーギャラリー/カメラから画像を取得し、その後、私はフォーマットを確認したいが、私は形式を確認する方法がわからない

@IBAction func selectPictureButtonDidPressed(_ sender: Any) { 


     let imagePickerController = UIImagePickerController() 
     imagePickerController.delegate = self 
     imagePickerController.allowsEditing = true 



     let actionSheet = UIAlertController(title: "Photo Source", message: "please choose your source", preferredStyle: .actionSheet) 


     // action camera 
     let actionCamera = UIAlertAction(title: "Camera", style: .default) { (action) in 

      if UIImagePickerController.isSourceTypeAvailable(.camera) { 
       imagePickerController.sourceType = .camera 
       self.present(imagePickerController, animated: true, completion: nil) 

      } else { 
       self.showAlert(alertTitle: "Opppss", alertMessage: "camera can't be used/not available", actionTitle: "OK") 
       print("camera can't be used/not available") 
      } 

     } 


     // action photo library 
     let actionPhotoLibrary = UIAlertAction(title: "Photo Library", style: .default) { (action) in 
      imagePickerController.sourceType = .photoLibrary 
      self.present(imagePickerController, animated: true, completion: nil) 
     } 


     //action cancel 
     let actionCancel = UIAlertAction(title: "Cancel", 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) 
    } 

は、どのように私はその形式をチェックしますか?

私はgoogleで見つけようとしましたが、URLから派生した画像フォーマットを取得しました。直接ではなく、おそらくUIImagePNGRepresentation()またはUIImageJPEGRepresentation()を使用して、生のデータに画像をカバーする必要があり、この

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(&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 : "https://i.stack.imgur.com/R64uj.jpg") 
let imageData = NSData(contentsOf: imageURLFromParse! as URL) 
print(imageData!.imageFormat) 
+0

を試すことができます。まずは 'URL'を使って始めましょう。 NSDataの場合も同様です。ちょうど 'データ'を使用してください。 – rmaddy

+0

あなたが投稿したコードは、 'UIImage'(型を持たない)からイメージの型を決定しようとしていません。 – rmaddy

+0

UIImageからのファイル拡張子を確認できない場合は、画像形式を確認する方法はありますか? – Alexa289

答えて

2

あなたは `NSURL`を使用して、URL``にキャストにはポイントがありませんによって無関係なこの

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
    { 

     let assetPath = info[UIImagePickerControllerReferenceURL] as! NSURL 
     if (assetPath.absoluteString?.hasSuffix("JPG"))! { 
      print("JPG") 
     } 
     else if (assetPath.absoluteString?.hasSuffix("PNG"))! { 
      print("PNG") 
     } 
     else if (assetPath.absoluteString?.hasSuffix("GIF"))! { 
      print("GIF") 
     } 
     else { 
      print("Unknown") 
     } 
    } 
+0

ユーザーがカメラから画像を選択した場合はどうなりますか?カメラの入力アプリが "info [UIImagePickerControllerReferenceURL] as!NSURL"にクラッシュする – Ameer

1

のようなUIImageから、その後、サーバーにTHATを送ります。そのデータはそれぞれPNG形式またはJPEG形式になります。

関連する問題