我正在开发一个iOS应用程序,它使用 AVCaptureDevice 从iPhone相机拍摄图像。
捕获的图像似乎具有72ppi的像素密度(ppi)。
1。我需要将这些图像发送到后端云服务器进行进一步处理,后端云服务器要求图像的最小像素密度为300ppi。
2. 我还看到从原生iPhone 5相机拍摄的图像的像素密度也为72 ppi。
3。我需要知道AVCapture
基础中是否有任何设置来设置所拍摄图像的像素密度,或者是否有办法增加像素密度图像取自72至300 ppi。
任何帮助都将不胜感激。
答案 0 :(得分:2)
在72ppi的3264乘2448像素图像和300ppi的3264乘2448像素图像之间有什么区别?除了元数据中的一些细微差别之外,几乎没有任何东西。而且我不明白为什么你的后端服务坚持最小的像素密度。
当您以特定尺寸打印或显示图像或使用特定尺寸将图像放置在文档中时,像素密度(或ppi)会变得相关。
无论如何,没有充分的理由在捕获时设置特定的ppi。这可能是Apple使用默认密度72ppi的原因。而且我不知道在捕获时有任何改变它的方法。
但是,您可以稍后通过修改JPEG文件的EXIF数据来更改它,例如:使用libexif。
答案 1 :(得分: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
或保存到您的私人应用文件夹中,具体取决于您的要求。