【swift】この里帆ちゃんは jpeg か png かそれとも〇〇？？

# 【swift】この吉岡里帆ちゃんは jpeg か png かそれとも〇〇？？
- ついカメラロールに保存してしまう [吉岡里帆さん](https://matome.naver.jp/odai/2149290466326227901)ですが、その画像をalamofireなどでPOSTするときに、imageTypeを指定しないといけません。
- そこで今回、**画像が jpeg　なのか pngなのかそれとも〇〇なのかを判定するextension**をメモとして残します。

## 私の里帆ちゃんベスト・コレクション

<img width="414" alt="Simulator Screen Shot - iPhone 6s Plus - 2017-10-05 at 20.43.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/62822/ec0e27aa-5a7d-cf45-8332-c1f3d53a013a.png">

## 実装する
### URLExtensionを作成
- まず、URLExtensionを作成しつつ、enumで拡張子を列挙しておきます

```URLExtension.swift
enum ImageType: String {
    case png = "png"
    case gif = "gif"
    case jpg = "jpeg"
    case bmp = "bmp"
}

extension URL {
    func imageTypeForExtention() -> ImageType? {
        let ext = self.pathExtension.lowercased()
        switch ext {
        case "jpg" , "jpeg":
            return .jpg
        case "png":
            return .png
        case "gif":
            return .gif
        case "bmp":
            return .bmp
        default:
            return nil
        }
    }
}
```

### UIImagePickerControllerで吉岡里帆ちゃん(画像)を取り出す
- `info[UIImagePickerControllerReferenceURL]` で画像のURLがわかりますのでそのURLをつかって`.pathExtension.lowercased()` で判定しています。
- UIImagePickerControllerのカメラで撮影した場合は、jpegですのでそのままjpegを使って下さい。

```ViewController.swift
    /*
     * 吉岡里帆ちゃんベスト・コレクション一覧（フォトライブラリ）から選ぶ
     */
    private func showPickeView() {
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) {
            let picker = UIImagePickerController()
            picker.modalPresentationStyle = UIModalPresentationStyle.popover
            picker.delegate = self
            picker.sourceType = UIImagePickerControllerSourceType.photoLibrary
            self.present(picker, animated: true, completion: nil)
        }
    }
    
    /*
     * 吉岡里帆ちゃんが選ばれたときに呼ばれる
     */
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        guard let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage else { return }
        var imageType: ImageType = .jpg
        // カメラのときはURLがないのでjpgを渡す
        if let imageURL = info[UIImagePickerControllerReferenceURL] as? URL {
            imageType = imageURL.imageTypeForExtention() ?? .jpg
        }
        print(imageType.rawValue)
        //適当に画像と拡張子を渡しておくとか
        //PhotoViewModel.sharedInstance.photo.value = (pickedImage, imageType)
        // 閉じてから画面遷移しとくとか
        //picker.dismiss(animated: true) {
          //  self.performSegue(segue: .toGenerate, sender: nil)
        //}
    }
    
    /*
     * カメラを起動する（吉岡里帆ちゃんじゃない）
     */
    private func showCameraView() {
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) {
            let picker = UIImagePickerController()
            picker.modalPresentationStyle = UIModalPresentationStyle.fullScreen
            picker.delegate = self // UINavigationControllerDelegate と　UIImagePickerControllerDelegateを実装する
            picker.sourceType = UIImagePickerControllerSourceType.camera
            self.present(picker, animated: true, completion: nil)
        }
    }
}
```

## デモ
![yosidariho_collection480.gif](https://qiita-image-store.s3.amazonaws.com/0/62822/a58e0f8f-8494-90d6-e4ef-d76ae85e4b7d.gif)

## まとめ
- URLのExtensionで `imageTypeForExtention()` で拡張子を取得することができました！！

## 関連記事
- [【swift】tableViewに何もなければ、吉岡里帆ちゃんが出現する](https://qiita.com/okamu_/items/4a541b2b5aba81f8653a) <- こちらもあわせてどうぞ