无法在iOS中找到图像的DPI

时间:2014-05-02 11:31:18

标签: ios objective-c uiimage dpi

我想找到从iPhone / iPad相机中捕获的图像的DPI

这就是我试图获得DPI的方式

 CFDictionaryRef exifDict = CMGetAttachment(imageDataSampleBuffer,
                                            kCGImagePropertyExifDictionary ,
                                            NULL);
originalExifDict = (__bridge NSMutableDictionary *)(exifDict);
[originalExifDict objectForKey:(NSString *)kCGImagePropertyDPIHeight]
[originalExifDict objectForKey:(NSString *)kCGImagePropertyDPIWidth]

然而,字典中的两个条目都变为0。 找到DPI的正确方法是什么? 在此先感谢您的帮助

3 个答案:

答案 0 :(得分:1)

    CGSize size;     
    NSNumber *width = (NSNumber *)CFDictionaryGetValue(exifDict, kCGImagePropertyDPIWidth);
    NSNumber *height = (NSNumber *)CFDictionaryGetValue(exifDict, kCGImagePropertyDPIHeight);
    size.width = [width floatValue];
    size.height = [height floatValue];

//告诉我它的工作与否。

答案 1 :(得分:0)

该信息不在imageDataSampleBuffer附带的元数据中。它是在保存图像时写入的(72 dpi),除非,首先,在保存之前编辑元数据时自己手动设置。

对于大多数用途, 无意义,但是,某些软件在将图像放入文档时使用它来计算图像的“正确大小”。因此,300dpi的3000像素正方形图像将出现10英寸(c.25.4cm)的正方形;在72 dpi时,它将近42英寸(约105.8厘米)的正方形。此外,一些在线图像上传器(特别是库存照片库等使用的那些)坚持使用具有高dpi dpi的图像。

答案 2 :(得分:0)

如果您使用的是imagePickerController,请使用以下代码

NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:assetURL
         resultBlock:^(ALAsset *asset)  {
             NSMutableDictionary *imageMetadata = nil;
             NSDictionary *metadata = asset.defaultRepresentation.metadata;
             imageMetadata = [[NSMutableDictionary alloc] initWithDictionary:metadata];
             NSLog (@"imageMetaData from AssetLibrary %@",imageMetadata);

             NSString *dpi = [imageMetadata objectForKey:@"DPIHeight"];

             NSLog (@"Dpi: %@",dpi);

         }
        failureBlock:^(NSError *error) {
            NSLog (@"error %@",error);
        }];