0

我正在开发一个 iOS 应用程序,它使用AVCaptureDevice从 iPhone 相机获取图像。

捕获的图像似乎具有 72ppi 的像素密度 (ppi)。

1.我需要将这些图像发送到后端云服务器进行进一步处理,该服务器期望图像的最小像素密度为 300ppi。

2.我还看到,从 iPhone 5 原生相机拍摄的图像也有 72 ppi 的像素密度。

3.我需要知道基础中是否有任何设置AVCapture来设置所拍摄图像的像素密度,或者是否有办法将拍摄图像的像素密度从72增加到300 ppi。

任何帮助,将不胜感激。

4

2 回答 2

2

72ppi 的 3264 x 2448 像素图像和 300ppi 的 3264 x 2448 像素图像有什么区别?除了元数据中的一些细微差别外,几乎没有任何区别。而且我不明白为什么您的后端服务坚持最低像素密度。

当您以特定尺寸打印或显示图像或将其放置在使用特定尺寸的文档中时,像素密度(或 ppi)变得相关。

无论如何,没有充分的理由在捕获时设置特定的 ppi。这可能就是 Apple 使用默认密度 72ppi 的原因。而且我不知道有什么方法可以在捕获时更改它。

但是,您可以稍后通过修改 JPEG 文件的 EXIF 数据来更改它,例如使用libexif

于 2014-04-21T14:05:51.107 回答
1

正如@Codo 所指出的,在输出图像(到显示器、打印机、RIP 或其他任何东西)之前,像素密度是无关紧要的。它是元数据,而不是图像数据。但是,如果您正在处理没有智慧理解这一点的第三方服务,则需要在捕获图像之后和保存之前编辑图像元数据。

这是如何:

captureStillImageAsynchronouslyFromConnection:stillImageConnection
    completionHandler:^(CMSampleBufferRef imageDataSampleBuffer 
    NSError *error) {
  CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(kCFAllocatorDefault,
      imageDataSampleBuffer,
      kCMAttachmentMode_ShouldPropagate);
  NSMutableDictionary *metadata = [[NSMutableDictionary alloc]
      initWithDictionary:(__bridge NSDictionary*)metadataDict];
  CFRelease(metadataDict);
  NSMutableDictionary *tiffMetadata = [[NSMutableDictionary alloc] init];
  [tiffMetadata setObject:[NSNumber numberWithInt:300]
      forKey(NSString*)kCGImagePropertyTIFFXResolution];
  [tiffMetadata setObject:[NSNumber numberWithInt:300] forKey:
      (NSString*)kCGImagePropertyTIFFYResolution];
  [metadata setObject:tiffMetadata forKey:(NSString*)kCGImagePropertyTIFFDictionary];
  .
  .
  .
}];

然后根据您的要求metadata输入或保存到您writeImageToSavedPhotosAlbum:metadata:completionBlock的私人应用程序文件夹中。writeImageDataToSavedPhotosAlbum:metadata:completionBlock

于 2014-04-21T15:48:48.800 回答