相关疑难解决方法(0)

UIImagePickerController并从现有照片中提取EXIF数据

众所周知,UIImagePickerController在选择后不会返回照片的元数据.但是,应用程序商店中的一些应用程序(Mobile Fotos,PixelPipe)似乎能够读取原始文件和存储在其中的EXIF数据,使应用程序能够从所选照片中提取地理数据.

他们似乎是通过从/ private/var/mobile/Media/DCIM/100APPLE /文件夹中读取原始文件并通过EXIF库运行它来完成此操作.

但是,我无法找到一种方法来匹配从UIImagePickerController返回的照片到磁盘上的文件.我已经探索了文件大小,但原始文件是JPEG,而返回的图像是原始UIImage,因此无法知道所选图像的文件大小.

我正在考虑制作一个哈希表并匹配每个图像的前x个像素.虽然这看起来有点过头了,但可能很慢.

有什么建议?

iphone gps cocoa-touch exif uiimagepickercontroller

56
推荐指数
5
解决办法
4万
查看次数

从iOS iphone中的相机返回的图像中读取GPS数据

我需要获取iOS设备相机拍摄的图像的GPS坐标.我不关心相机胶卷图像,只关心用UIImagePickerControllerSourceTypeCamera拍摄的图像.

我已经阅读了很多stackoverflow的答案,比如来自UIImage的Get Exif数据 - UIImagePickerController,它假设你正在使用AssetsLibrary框架,它似乎不适用于相机图像,或者使用CoreLocaiton从应用程序获取纬度/经度本身,而不是图像.

使用CoreLocation 不是一种选择.按下快门按钮时,这不会给我坐标.(借助基于CoreLocation解决方案,您可能需要你带了相机视图之前或之后记录COORDS,当然,如果设备在移动坐标将是错误的.这个方法应该用固定设备工作).

我只是iOS5,所以我不需要支持旧设备.这也适用于商业产品,因此我无法使用http://code.google.com/p/iphone-exif/.

那么,从iOS5中相机返回的图像中读取GPS数据有哪些选择?我现在能够想到的是将图像保存到相机胶卷,然后使用AssetsLibrary,但这看起来很糟糕.

谢谢!


这是我根据Caleb的答案编写的代码.

    UIImage *image =  [info objectForKey:UIImagePickerControllerOriginalImage];

    NSData *jpeg = UIImageJPEGRepresentation(image,1.0);
    CGImageSourceRef  source ;
    source = CGImageSourceCreateWithData((__bridge CFDataRef)jpeg, NULL);

    NSDictionary *metadataNew = (__bridge NSDictionary *) CGImageSourceCopyPropertiesAtIndex(source,0,NULL);  

    NSLog(@"%@",metadataNew);
Run Code Online (Sandbox Code Playgroud)

我的控制台显示:

    2012-04-26 14:15:37:137 ferret[2060:1799] {
        ColorModel = RGB;
        Depth = 8;
        Orientation = 6;
        PixelHeight = 1936;
        PixelWidth = 2592;
        "{Exif}" =     {
            ColorSpace = 1;
            PixelXDimension = 2592;
            PixelYDimension = 1936;
        };
        "{JFIF}" =     {
            DensityUnit = 0; …
Run Code Online (Sandbox Code Playgroud)

camera gps geolocation ios

35
推荐指数
4
解决办法
4万
查看次数

使用相机拍摄的照片不包含任何ALAsset元数据

最奇怪的事情正在发生.我有一个操作表,让用户可以选择用相机拍照或从相机胶卷中选择一个.在UIImagePicker从选择返回后,我使用ALAssetsLibrary来确定嵌入在照片中的GPS信息.从相机胶卷中选择照片效果很好,我可以检索GPS信息.但是,用相机拍照绝对没有提供GPS信息,实际上我根本没有元数据.有谁知道我在这里做错了什么?

代码如下:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{    
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    if([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage])
    {        
        void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *) = ^(ALAsset *asset)
        {
            // get images metadata
            NSDictionary *metadata = asset.defaultRepresentation.metadata;
            NSLog(@"Image Meta Data: %@",metadata);

            // get coords 
            CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation];
            NSLog(@"coordLat: %f , coordLon: %f", location.coordinate.latitude, location.coordinate.longitude);

            // do more here - rest of code snipped to keep this question short

    };
    NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library assetForURL:assetURL …
Run Code Online (Sandbox Code Playgroud)

iphone gps objective-c uiimagepickercontroller alassetslibrary

8
推荐指数
1
解决办法
7646
查看次数

上传到服务器的iOS UIImage被旋转

我正在使用以下代码将图像发送到Web服务器.它的工作原理是,图像在上传后因某种原因而被旋转.

这是我的上传方法:

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

        [self dismissViewControllerAnimated:YES completion:nil];

        NSData *image = UIImageJPEGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage], 0.1);

        // use token with url for json data from contents of url
        NSString *savedValue = [[NSUserDefaults standardUserDefaults]
                                stringForKey:@"token"];

        NSString *urlString = [NSString stringWithFormat:@"%@%@/photos?token=%@", kIDURLPhoto, listingId, savedValue];

        NSLog(@"urlstring for comment is %@",urlString);

        self.flUploadEngine = [[fileUploadEngine alloc] initWithHostName:urlString customHeaderFields:nil];

        NSMutableDictionary *postParams = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"image", @"caption", nil];

        self.flOperation = [self.flUploadEngine postDataToServer:postParams path:nil];
        [self.flOperation addData:image forKey:@"picture" mimeType:@"image/jpeg" fileName:@"upload.jpg"];

        [self.flOperation addCompletionHandler:^(MKNetworkOperation* operation) {
            NSLog(@"%@", [operation responseString]);

    // …
Run Code Online (Sandbox Code Playgroud)

objective-c uiimage ios

1
推荐指数
1
解决办法
3221
查看次数

检查上传的图片是否为 iOS 屏幕截图

通过UIImagePickerController,有没有办法判断用户从库中选择的图像是否是屏幕截图?另外,是否有与屏幕截图相关的时间戳?我已阅读从 UIImage - UIImagePickerController 获取 Exif 数据,但屏幕截图是否特别具有此数据?

iphone screenshot ios

1
推荐指数
1
解决办法
2万
查看次数

调整大小和设置JPEG图像的质量,同时在iOS中保留EXIF

在iOS应用中,我有一个NSData对象,它是一个JPEG文件,需要将其调整为给定的分辨率(2048x2048),并且需要将JPEG质量设置为75%。需要在将EXIF数据保留在文件中的同时进行设置。该照片不在相机胶卷中-它是从DSLR相机通过网络拉出的,只是与应用程序临时存储在一起。如果图像通过UIImage行程,则EXIF数据将丢失。如何在不丢失EXIF的情况下执行调整大小和设置质量?还是有一种方法可以在转换前剥离EXIF数据,并在完成后将其添加回去?

exif objective-c nsdata ios

0
推荐指数
1
解决办法
2031
查看次数