【swift】この吉岡里帆ちゃんは jpeg か png かそれとも〇〇??
- ついカメラロールに保存してしまう 吉岡里帆さんですが、その画像をalamofireなどでPOSTするときに、imageTypeを指定しないといけません。
- そこで今回、画像が jpeg なのか pngなのかそれとも〇〇なのかを判定するextensionをメモとして残します。
私の里帆ちゃんベスト・コレクション
実装する
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)
}
}
}
デモ
まとめ
- URLのExtensionで
imageTypeForExtention()
で拡張子を取得することができました!!
関連記事
- 【swift】tableViewに何もなければ、吉岡里帆ちゃんが出現する <- こちらもあわせてどうぞ