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

  • ついカメラロールに保存してしまう 吉岡里帆さんですが、その画像をalamofireなどでPOSTするときに、imageTypeを指定しないといけません。
  • そこで今回、画像が jpeg なのか pngなのかそれとも〇〇なのかを判定するextensionをメモとして残します。

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

Simulator Screen Shot - iPhone 6s Plus - 2017-10-05 at 20.43.47.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

まとめ

  • URLのExtensionで imageTypeForExtention() で拡張子を取得することができました!!

関連記事