Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.

@okamu_

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

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

関連記事

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What is going on with this article?