デザインパターン
Swift
1000チャレンジ

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


関連記事