根據(jù)圖片獲取拍攝地點(diǎn)和拍攝時(shí)間

部分境外城市反編碼顯示北大西洋;窳小Q肚L指<退!

效果圖.gif

參考
iOS 獲得圖片的時(shí)間(通過拍照和取出)
如何獲取iPhone拍攝的png照片的拍攝時(shí)間,位置信息等圖片屬性?

簡單理念

  1. 拍照獲取
    拍照即可通過CoreLocation獲取當(dāng)前位置和當(dāng)前時(shí)間晾匠。
  2. 相冊獲取
    相冊即可通過ALAssetsLibrary來獲取拍攝時(shí)間和拍攝地點(diǎn)茶袒。

本軟件是通過imagePicker的代理回調(diào)中獲取info,并從info中獲取大量有關(guān)的信息凉馆,部分圖片沒有是因?yàn)榕恼諘r(shí)沒有錄入信息薪寓,存在無網(wǎng)絡(luò)和關(guān)閉權(quán)限功能。


引入頭文件

#import <MobileCoreServices/MobileCoreServices.h>

#import <ImageIO/CGImageProperties.h>

#import <AssetsLibrary/AssetsLibrary.h>

#import <CoreLocation/CoreLocation.h>

#import "NSDictionary+CLLocation.h"

定義屬性

@property (nonatomic, strong) UIImagePickerController *imagePickerVC;

@property (nonatomic, strong) CLLocationManager *locationmanager;//拍照定位

@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UILabel *time;
@property (weak, nonatomic) IBOutlet UILabel *jingdu;
@property (weak, nonatomic) IBOutlet UILabel *weidu;
@property (weak, nonatomic) IBOutlet UILabel *location;

@property (nonatomic, copy) NSString *locationFormat;

懶加載

#pragma mark 懶加載
- (UIImagePickerController *)imagePickerVC {
    if (!_imagePickerVC) {
        _imagePickerVC = [[UIImagePickerController alloc] init];
        // 設(shè)置資源來源(相冊澜共、相機(jī)向叉、圖庫之一)
        //        imagePickerVC.sourceType = UIImagePickerControllerSourceTypeCamera;
        // 設(shè)置可用的媒體類型、默認(rèn)只包含kUTTypeImage嗦董,如果想選擇視頻母谎,請?zhí)砑觡UTTypeMovie
        // 如果選擇的是視屏,允許的視屏?xí)r長為20秒
        _imagePickerVC.videoMaximumDuration = 20;
        // 允許的視屏質(zhì)量(如果質(zhì)量選取的質(zhì)量過高京革,會(huì)自動(dòng)降低質(zhì)量)
        _imagePickerVC.videoQuality = UIImagePickerControllerQualityTypeHigh;
        _imagePickerVC.mediaTypes = @[(NSString *)kUTTypeMovie, (NSString *)kUTTypeImage];
        // 設(shè)置代理奇唤,遵守UINavigationControllerDelegate, UIImagePickerControllerDelegate 協(xié)議
        _imagePickerVC.delegate = self;
        // 是否允許編輯(YES:圖片選擇完成進(jìn)入編輯模式)
//        _imagePickerVC.allowsEditing = YES;
        
    }
    return _imagePickerVC;
}


-(CLLocationManager *)locationManager {
    if (!_locationManager) {
        _locationManager = [[CLLocationManager alloc] init];
        _locationManager.delegate = self;
        _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        _locationManager.distanceFilter = 1000.0f;
    }
    return _locationManager;
}

拍照相關(guān)代碼



-(void)getLocation
{
    //判斷定位功能是否打開
    if ([CLLocationManager locationServicesEnabled]) {
        self.locationManager = [[CLLocationManager alloc]init];
        self.locationManager.delegate = self;
        [self.locationManager requestAlwaysAuthorization];
        
        [self.locationManager requestWhenInUseAuthorization];
        
        //設(shè)置尋址精度
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        self.locationManager.distanceFilter = 5.0;
        [self.locationManager startUpdatingLocation];
    }
}

//定位失敗后調(diào)用此代理方法
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{}

//獲取一次定位,然后關(guān)掉manager
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
    //防止多次調(diào)用
    
    CLLocation *currentLocation = [locations lastObject];
    
    NSTimeInterval locationAge = -[currentLocation.timestamp timeIntervalSinceNow];
    
    if (locationAge > 5.0) return;
    
    if (currentLocation.horizontalAccuracy < 0) return;
    
    //當(dāng)前經(jīng)緯度
    self.jingdu.text = [NSString stringWithFormat:@"%f", currentLocation.coordinate.longitude];
    self.weidu.text = [NSString stringWithFormat:@"%f", currentLocation.coordinate.latitude];
    
    CLGeocoder *clGeoCoder = [[CLGeocoder alloc] init];
    
    CLLocation *newLocation = [[CLLocation alloc] initWithLatitude:currentLocation.coordinate.latitude longitude:currentLocation.coordinate.longitude];
    
    __weak typeof(self)weakSelf = self;
    
    //反向地理編碼的請求 -> 根據(jù)經(jīng)緯度 獲取 位置
    [clGeoCoder reverseGeocodeLocation:newLocation completionHandler: ^(NSArray *placemarks,NSError *error) {
        
        for (CLPlacemark *placeMark in placemarks)
        {
            NSDictionary *addressDic=placeMark.addressDictionary;
            
            NSArray *location_Arr = [addressDic objectForKey:@"FormattedAddressLines"];//系統(tǒng)格式化后的位置
            
            weakSelf.location.text = [location_Arr firstObject];
        }
    }];
    
    [self.locationManager stopUpdatingLocation];

}


相冊相關(guān)代碼


{//相冊
        
        NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];
        
        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
        
        __block NSMutableDictionary *imageMetadata_GPS = nil;
        
        __weak typeof(self)weakSelf = self;
        
        [library assetForURL:assetURL resultBlock:^(ALAsset *asset) {
            
             //獲取時(shí)間
             NSDate* pictureDate = [asset valueForProperty:ALAssetPropertyDate];
             NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
             formatter.dateFormat = @"yyyy:MM:dd HH:mm:ss";
             formatter.timeZone = [NSTimeZone localTimeZone];
             NSString * pictureTime = [formatter stringFromDate:pictureDate];
             weakSelf.time.text = pictureTime;
             
             //獲取GPS
             imageMetadata_GPS = [[NSMutableDictionary alloc] initWithDictionary:asset.defaultRepresentation.metadata];
             
             NSDictionary *GPSDict=[imageMetadata_GPS objectForKey:(NSString*)kCGImagePropertyGPSDictionary];
             
             if (GPSDict!=nil) {
                 
                 CLLocation *loc=[GPSDict locationFromGPSDictionary];
                 
                 weakSelf.weidu.text = [NSString stringWithFormat:@"%f", loc.coordinate.latitude];
                 weakSelf.jingdu.text = [NSString stringWithFormat:@"%f", loc.coordinate.longitude];
                 
                 CLGeocoder *clGeoCoder = [[CLGeocoder alloc] init];
                 
                 CLLocation *newLocation = [[CLLocation alloc] initWithLatitude:loc.coordinate.latitude longitude:loc.coordinate.longitude];
                 
                 //反向地理編碼的請求 -> 根據(jù)經(jīng)緯度 獲取 位置
                 [clGeoCoder reverseGeocodeLocation:newLocation completionHandler: ^(NSArray *placemarks,NSError *error) {
                     for (CLPlacemark *placeMark in placemarks)
                     {
                         NSDictionary *addressDic=placeMark.addressDictionary;
                         
                         NSArray *location_Arr = [addressDic objectForKey:@"FormattedAddressLines"];//系統(tǒng)格式化后的位置
                         
                         weakSelf.location.text = [location_Arr firstObject];
                         
                     }
                 }];

             }else{
                     weakSelf.weidu.text = @"此照片沒有GPS信息";
                     weakSelf.jingdu.text = @"此照片沒有GPS信息";
                     weakSelf.location.text = @"此照片沒有拍攝位置";
                 }
                 
             }
     
            failureBlock:^(NSError *error) {
        }];
    }

demo地址

https://github.com/pengshengsongcode/ThroughPicGetShootPlaceWithTime

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匹摇,一起剝皮案震驚了整個(gè)濱河市咬扇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌廊勃,老刑警劉巖懈贺,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坡垫,居然都是意外死亡梭灿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門冰悠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堡妒,“玉大人,你說我怎么就攤上這事屿脐√樵椋” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵的诵,是天一觀的道長万栅。 經(jīng)常有香客問我,道長西疤,這世上最難降的妖魔是什么烦粒? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮代赁,結(jié)果婚禮上扰她,老公的妹妹穿的比我還像新娘。我一直安慰自己芭碍,他們只是感情好徒役,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窖壕,像睡著了一般忧勿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞻讽,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天鸳吸,我揣著相機(jī)與錄音,去河邊找鬼速勇。 笑死晌砾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烦磁。 我是一名探鬼主播养匈,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼个初!你這毒婦竟也來了乖寒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤院溺,失蹤者是張志新(化名)和其女友劉穎楣嘁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體珍逸,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逐虚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谆膳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叭爱。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漱病,靈堂內(nèi)的尸體忽然破棺而出买雾,到底是詐尸還是另有隱情把曼,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布漓穿,位于F島的核電站嗤军,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晃危。R本人自食惡果不足惜叙赚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望僚饭。 院中可真熱鬧震叮,春花似錦、人聲如沸鳍鸵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽权纤。三九已至钓简,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汹想,已是汗流浹背外邓。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留古掏,地道東北人损话。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像槽唾,于是被迫代替她去往敵國和親丧枪。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容