我正在使用Appcelerator Titanium构建应用。它具有照片上传功能,因此我构建了一个PHP后端(CodeIgniter + RESTful Server)来处理上传的文件。由于Titanium从照片中删除了EXIF数据,因此我使用myMedia module获取EXIF数据,因此我仍然可以将EXIF数据发布到PHP后端。
模块返回的数组如下所示:
{
exif = {
ApertureValue = "2.970853567123413";
BrightnessValue = "5.906054496765137";
ColorSpace = 1;
ComponentsConfiguration = (
0,
0,
0,
1
);
DateTimeDigitized = "2012:12:22 12:59:56";
DateTimeOriginal = "2012:12:22 12:59:56";
ExifVersion = (
2,
2,
1
);
ExposureMode = 0;
ExposureProgram = 2;
ExposureTime = "0.007936508394777775";
FNumber = "2.799999952316284";
Flash = 16;
FlashPixVersion = (
1,
0
);
FocalLenIn35mmFilm = 35;
FocalLength = "3.849999904632568";
ISOSpeedRatings = (
80
);
MeteringMode = 5;
PixelXDimension = 2592;
PixelYDimension = 1936;
SceneCaptureType = 0;
SensingMethod = 2;
ShutterSpeedValue = "6.973695755004883";
SubjectArea = (
1295,
967,
699,
696
);
WhiteBalance = 0;
};
location = {
latitude = "52.51933333333334";
longitude = "13.40083333333333";
};
path = "assets-library://asset/asset.JPG?id=E5040F0C-C86A-411B-ADA8-36C9EC91A526&ext=JPG";
}
我已经在互联网上做了一些研究,找出这是什么类型的数组,对我来说它似乎是一个Plist(XML)。我查看了myMedia模块类,并且我发现它使用NSDictionary类来返回EXIF数据。
我已尝试过一些PHP Plist解析来处理这个数组,但它们都没有实际工作。我不知道如何解析这个数组。
提前致谢!
答案 0 :(得分:0)
从模块中获取结果并将其转换为字符串。将字符串传递给您的服务器并将其转换回JSON ...我不是一个PHP人,但我猜有一种方法可以解析PHP中的JSON?
答案 1 :(得分:0)
这似乎是旧式ASCII属性列表。你可能找不到这种格式的解析器,因为它几乎从未用于交换--AFAIK唯一可以解析它的是Apple自己的库,我甚至不确定它们是否支持这种蹩脚的旧格式。您可能从NSDictionary的description
方法获得了此方法,该方法并非用于此目的。要准备要发布到服务器的数据,首先通过NSJSONSerialization运行它并发送它。然后你将处理普通的JSON。 (你也可以通过NSPropertyListSerialization运行它并使用你找到的plist库,但是给出了这两个选项,我不明白为什么你会选择那个。)
答案 2 :(得分:0)
我找到了解决方案! JSONkit 解决了我的问题。 Apple自己的JSON库不起作用,无法将NSDictionary对象转换为JSON字符串。
我在 MyMediaModule.M 中插入此字符串(在第1473行之后):
NSString *JSONMeta = [metadata JSONString];
然后我换了第1475行:
//[dictionary setObject:dictMeta forKey:@"metadata"];
[dictionary setObject:JSONMeta forKey:@"JSONMeta"];
另外,不要忘记包含JSONkit库:
#import "JSONKit.h"
现在在Appcelerator Titanium中使用event.JSONMeta
代替event.metadata
:
mymedia.openPhotoGallery({
success:function(event)
{
Ti.API.info(event.JSONMeta);
}
}
感谢您的帮助!我从来没有在Objective-C中编码,因此很难开始,但毕竟解决方案非常简单。