iOS图片库照片GPS处理

最近想对图片库里的拍照地点进行批量添加。
定位和获取图片库照片比较好解决。
但是添加地理位置信息就麻烦多了。

单反拍的照片传输进手机之后,是没有地理位置信息的。
找了网上的教程,获取照片地址信息,发现根本获取不到:

NSData *imageData = UIImageJPEGRepresentation(获取的照片, 1);
        CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);
        NSDictionary *imageInfo = (__bridge NSDictionary*)CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);
        NSMutableDictionary *metaDataDic = [imageInfo mutableCopy];
        NSMutableDictionary *exifDic =[[metaDataDic objectForKey:(NSString*)kCGImagePropertyExifDictionary]mutableCopy];
        NSMutableDictionary *GPSDic =[[metaDataDic objectForKey:(NSString*)kCGImagePropertyGPSDictionary]mutableCopy];

单反拍摄,没有GPS信息的照片返回:

{
ColorModel = RGB;
Depth = 8;
Orientation = 1;
PixelHeight = 1244;
PixelWidth = 828;
ProfileName = "sRGB IEC61966-2.1";
"{Exif}" = {
ColorSpace = 1;
PixelXDimension = 828;
PixelYDimension = 1244;
};
"{JFIF}" = {
DensityUnit = 0;
JFIFVersion = (
1,
0,
1
);
XDensity = 72;
YDensity = 72;
};
"{TIFF}" = {
Orientation = 1;
};
}

iPhone拍摄,有地理位置信息的照片:

{
ColorModel = RGB;
Depth = 8;
Orientation = 1;
PixelHeight = 1102;
PixelWidth = 826;
ProfileName = "Display P3";
"{Exif}" = {
PixelXDimension = 826;
PixelYDimension = 1102;
};
"{JFIF}" = {
DensityUnit = 0;
JFIFVersion = (
1,
0,
1
);
XDensity = 72;
YDensity = 72;
};
"{TIFF}" = {
Orientation = 1;
};
}

两种都没法获取位置信息。
如果将位置信息写成字典

[GPSDic setObject:[NSNumber numberWithFloat:37.795]
forKey:(NSString)kCGImagePropertyGPSLatitude];
[GPSDic setObject:@"N" forKey:(NSString
)kCGImagePropertyGPSLatitudeRef];
[GPSDic setObject:[NSNumber numberWithFloat:122.410]
forKey:(NSString)kCGImagePropertyGPSLongitude];
[GPSDic setObject:@"W" forKey:(NSString
)kCGImagePropertyGPSLongitudeRef];
NSLog(@"%@",GPSDic);

强行加上,也无济于事。
突然发现该照片的资源PHAsset信息里,有location属性,是可以拿到位置信息的。那么通过对PHAsset的操作是否可以添加GPS信息呢?

1、
//UIimage转换PHAsset
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
            PHAssetChangeRequest * request = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
            if (request.placeholderForCreatedAsset.localIdentifier) {
                NSString *localIndentifier = request.placeholderForCreatedAsset.localIdentifier;
                PHFetchResult *assetResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[localIndentifier] options:nil];
                PHAsset *asset = assetResult.firstObject;
            }
        } completionHandler:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                NSLog(@"添加成功!");
            } else {
                NSLog(@"添加失败!");
            }
        }];
2、从PHAsset中获取更详细的照片信息:

有地理位置信息的照片{
ColorModel = RGB;
DPIHeight = 72;
DPIWidth = 72;
Depth = 8;
Orientation = 6;
PixelHeight = 3024;
PixelWidth = 4032;
PrimaryImage = 1;
ProfileName = "Display P3";
"{Exif}" = {
ApertureValue = "1.69599381283836";
BrightnessValue = "2.559109103158562";
ColorSpace = 65535;
ComponentsConfiguration = (
1,
2,
3,
0
);
DateTimeDigitized = "2020:07:06 15:06:48";
DateTimeOriginal = "2020:07:06 15:06:48";
ExifVersion = (
2,
3,
1
);
ExposureBiasValue = 0;
ExposureMode = 0;
ExposureProgram = 2;
ExposureTime = "0.05882352941176471";
FNumber = "1.8";
Flash = 16;
FlashPixVersion = (
1,
0
);
FocalLenIn35mmFilm = 28;
FocalLength = 4;
ISOSpeedRatings = (
40
);
LensMake = Apple;
LensModel = "iPhone X back dual camera 4mm f/1.8";
LensSpecification = (
4,
6,
"1.8",
"2.4"
);
MeteringMode = 5;
OffsetTime = "+08:00";
OffsetTimeDigitized = "+08:00";
OffsetTimeOriginal = "+08:00";
PixelXDimension = 4032;
PixelYDimension = 3024;
SceneCaptureType = 0;
SceneType = 1;
SensingMethod = 2;
ShutterSpeedValue = "4.059350611812313";
SubjectArea = (
2015,
1511,
2217,
1330
);
SubsecTimeDigitized = 139;
SubsecTimeOriginal = 139;
WhiteBalance = 0;
};
"{GPS}" = {
Altitude = "4.610363961252704";
AltitudeRef = 0;
DestBearing = "60.45497512437811";
DestBearingRef = T;
HPositioningError = "66.42636786961583";
ImgDirection = "60.45497512437811";
ImgDirectionRef = T;
Latitude = "xx.xxxxxxxxxxxx";
LatitudeRef = N;
Longitude = "xx.xxxxxxxxxxxx";
LongitudeRef = E;
Speed = 0;
SpeedRef = K;
};
"{MakerApple}" = {
1 = 11;
12 = (
"53.55469",
"95.67578"
);
13 = 26;
14 = 0;
15 = 2;
16 = 1;
2 = {length = 512, bytes = 0x88008500 83008600 87008d00 90009200 ... c0004f00 7000b400 };
20 = 5;
23 = 0;
25 = 0;
26 = q825s;
3 = {
epoch = 0;
flags = 1;
timescale = 1000000000;
value = 1645823363837291;
};
31 = 0;
32 = "6DEA2F72-2701-47E0-804C-78F183EEC448";
33 = 0;
35 = (
12,
536871070
);
37 = 0;
38 = 0;
39 = 0;
4 = 1;
43 = "A00C17E9-F64B-46D0-B7FF-BE48307967CF";
5 = 174;
6 = 185;
7 = 1;
8 = (
"0.1065291",
"0.01893699",
"-0.9845731"
);
};
"{TIFF}" = {
DateTime = "2020:07:06 15:06:48";
Make = Apple;
Model = "iPhone X";
Orientation = 6;
ResolutionUnit = 2;
Software = "13.5.1";
TileLength = 512;
TileWidth = 512;
XResolution = 72;
YResolution = 72;
};
}

照片信息比从UIImage中取得的详细多了。

3、更新图片和视频属性(名义上是更新,但是也只能更新四个内容:创建日期、拍照地点、是否收藏、是否隐藏。)
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    PHAssetChangeRequest * changeRequest = [PHAssetChangeRequest changeRequestForAsset:asset];
    changeRequest.location = self.location;
} completionHandler:^(BOOL success, NSError * _Nullable error) {
  if (success) {
    NSLog(@"修改成功");
  } else {
    NSLog(@"修改失败");
  }
}];

参考资料:
//www.greatytc.com/p/40f3c6e02061 PHAsset的增删改查

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354