Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

関連記事

okamu_
no plan inc. CEO 元フリーランスエンジニア/ iOS / サーバーサイド / 共同創業 / 福岡出身 https://qiita.com/organizations/noplan-inc
https://twitter.com/okamu_ro
admin-guild
「Webサービスの運営に必要なあらゆる知見」を共有できる場として作られた、運営者のためのコミュニティです。
https://admin-guild.slack.com
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした