LoginSignup
4
6

More than 5 years have passed since last update.

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

Posted at

【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() で拡張子を取得することができました!!

関連記事

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6