iPhoneで撮影した写真からGPSやEXIF情報を取り出して利用したいが、HEIC形式のものからは取り出せず困っています。
同一の写真でもオリジナルのHEIC形式のものからは読み取れなかったものが、他のアプリでjpg形式に変換されたものからは読み取れたので、GPSやEXIF情報自体がないわけでは無いようです。
以下のようなコードで読み込んでいます。
swift
1import UIKit 2import Photos 3class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 4 5 //選んだ写真を表示するびゅー 6 @IBOutlet weak var imageView: UIImageView! 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view. 11 } 12 13 //アルバムを呼び出すボタン 14 @IBAction func toAlbumBtn(_ sender: Any) { 15 let picker = UIImagePickerController() //アルバムを開く処理を呼び出す 16 picker.sourceType = .photoLibrary 17 picker.delegate = self 18 present(picker, animated: true) 19 self.present(picker, animated: true, completion: nil) 20 } 21 22 // 画像が選択された時に呼ばれる 23 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 24 //imageViewにカメラロールから選んだ画像をビューに表示する 25 if let selectedImage = info[.originalImage] as? UIImage { 26 imageView.image = selectedImage 27 } 28 //infoは読み込んだ画像についてのURL等の情報 29 print("いんふぉ",info) 30 //画像のURLを取り出す。 31 let url = info[.imageURL] as! URL 32 print("いんふぉゆーあーるえる",url) 33 34 //画像のURLを指定してCIImageで取り込んでプロパティを表示。exif,tiffを含む 35 let inputCIImage = CIImage(contentsOf: url)! 36 let CIImageProperties = inputCIImage.properties 37 print("しーあいいめーじぷろぱてぃ",CIImageProperties) 38 39 self.dismiss(animated: true) //画像をImageViewに表示したらアルバムを閉じる 40 } 41 42 // 画像選択がキャンセルされた時に呼ばれる 43 func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 44 self.dismiss(animated: true, completion: nil) 45 } 46}
これで、HEIC形式の写真を読み込むと、
しーあいいめーじぷろぱてぃ ["PixelHeight": 3024, "{TIFF}": { Orientation = 1; ResolutionUnit = 2; XResolution = 72; YResolution = 72; }, "{Exif}": { ColorSpace = 1; ComponentsConfiguration = ( 1, 2, 3, 0 ); ExifVersion = ( 2, 2, 1 ); FlashPixVersion = ( 1, 0 ); PixelXDimension = 4032; PixelYDimension = 3024; SceneCaptureType = 0; }, "Depth": 8, "ColorModel": RGB, "DPIHeight": 72, "DPIWidth": 72, "Orientation": 1, "PixelWidth": 4032, "ProfileName": Display P3]
となるが、
jpg形式で保存し直した写真を読み込むと、
しーあいいめーじぷろぱてぃ ["PixelHeight": 3024, "{GPS}": { Altitude = "95.04964832436906"; AltitudeRef = 0; DestBearing = "63.17312620115311"; DestBearingRef = M; HPositioningError = 10; ImgDirection = "63.17312620115311"; ImgDirectionRef = M; Latitude = "34.884195"; LatitudeRef = N; Longitude = "134.5251"; LongitudeRef = E; Speed = 0; SpeedRef = K; }, "{MakerApple}": { 1 = 11; 12 = ( "21.16406", "24.17578" ); 13 = 14; 14 = 4; 15 = 2; 16 = 1; 2 = {length = 512, bytes = 0x84006900 9200af00 d7000e01 0901f500 ... 7e004800 52007100 }; 20 = 5; 23 = 8192; 25 = 0; 26 = q825s; 3 = { epoch = 0; flags = 1; timescale = 1000000000; value = 474567397269583; }; 31 = 0; 32 = "E0E64200-8A54-488A-9F0E-148460FE6E9E"; 33 = 0; 35 = ( 33, 536870991 ); 37 = 0; 38 = 0; 39 = 0; 4 = 1; 43 = "CCD9F1B7-6227-4326-8B6C-89B9920EE052"; 5 = 181; 6 = 184; 7 = 1; 8 = ( "-0.5236124", "-0.01103583", "-0.8577724" ); }, "DPIWidth": 72, "{TIFF}": { DateTime = "2020:05:16 15:38:12"; Make = Apple; Model = "iPhone X"; Orientation = 1; ResolutionUnit = 2; Software = "13.1.3"; TileLength = 512; TileWidth = 512; XResolution = 72; YResolution = 72; }, "Orientation": 1, "DPIHeight": 72, "PixelWidth": 4032, "Depth": 8, "{Exif}": { ApertureValue = "1.69599381283836"; BrightnessValue = "1.886196921169542"; ColorSpace = 65535; ComponentsConfiguration = ( 1, 2, 3, 0 ); DateTimeDigitized = "2020:05:16 15:38:12"; DateTimeOriginal = "2020:05:16 15:38:12"; DigitalZoomRatio = "1.8"; ExifVersion = ( 2, 3, 1 ); ExposureBiasValue = 0; ExposureMode = 0; ExposureProgram = 2; ExposureTime = "0.06666666666666667"; FNumber = "1.8"; Flash = 24; FlashPixVersion = ( 1, 0 ); FocalLenIn35mmFilm = 51; FocalLength = 4; ISOSpeedRatings = ( 64 ); LensMake = Apple; LensModel = "iPhone X back dual camera 4mm f/1.8"; LensSpecification = ( 4, 6, "1.8", "2.4" ); MeteringMode = 5; OffsetTime = "+09:00"; OffsetTimeDigitized = "+09:00"; OffsetTimeOriginal = "+09:00"; PixelXDimension = 4032; PixelYDimension = 3024; SceneCaptureType = 0; SceneType = 1; SensingMethod = 2; ShutterSpeedValue = "3.907208021698036"; SubjectArea = ( 2011, 1505, 2212, 1327 ); SubsecTimeDigitized = 257; SubsecTimeOriginal = 257; WhiteBalance = 0; }, "{JFIF}": { DensityUnit = 0; JFIFVersion = ( 1, 0, 1 ); XDensity = 72; YDensity = 72; }, "ColorModel": RGB]
と、なります。
HEIF形式の写真から直接、または、アプリ内でjpg形式に変換して、GPSやEXIF情報を取り出すにはどうすればよいか教えていただけますでしょうか。
宜しくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/22 00:51
2020/05/22 00:56
2020/05/22 01:17
2020/05/22 01:20