使用像素密度(ppi)从摄像头捕获iOS图像>;300ppi
我正在开发一个iOS应用程序,它使用AVCaptureDevice从iPhone摄像头拍摄图像 拍摄的图像的像素密度(ppi)似乎为72ppi 1。我需要将这些图像发送到后端云服务器进行进一步处理,该服务器希望图像的最小像素密度为300ppi 2.我还看到,从本机iPhone 5摄像头拍摄的图像的像素密度也为72 ppi <>强>3。< /强>我需要知道在<代码> avcPase<代码>基础中是否有设置设置所拍摄的图像的像素密度,或者是否有增加72到300 ppi的图像的像素密度的方法。使用像素密度(ppi)从摄像头捕获iOS图像>;300ppi,ios,objective-c,uiimage,avcapturedevice,Ios,Objective C,Uiimage,Avcapturedevice,我正在开发一个iOS应用程序,它使用AVCaptureDevice从iPhone摄像头拍摄图像 拍摄的图像的像素密度(ppi)似乎为72ppi 1。我需要将这些图像发送到后端云服务器进行进一步处理,该服务器希望图像的最小像素密度为300ppi 2.我还看到,从本机iPhone 5摄像头拍摄的图像的像素密度也为72 ppi 强>3。< /强>我需要知道在 avcPase基础中是否有设置设置所拍摄的图像的像素密度,或者是否有增加72到300 ppi的图像的像素密度的方法。 如果您有任何帮助,我们将不
如果您有任何帮助,我们将不胜感激。72ppi的3264 x 2448像素图像与300ppi的3264 x 2448像素图像有什么区别?除了元数据中的一些细微差别外,几乎没有任何区别。我不明白为什么你的后端服务坚持最低像素密度 当您以特定大小打印或显示图像或使用特定大小将其放置在文档中时,像素密度(或ppi)将变得相关 无论如何,没有充分的理由在捕获时设置特定的ppi。这可能就是苹果使用默认密度72ppi的原因。我不知道有什么方法可以在拍摄时改变它
但是,您可以稍后通过修改JPEG文件的EXIF数据来更改它,例如使用。72ppi的3264 x 2448像素图像和300ppi的3264 x 2448像素图像之间有什么区别?除了元数据中的一些细微差别外,几乎没有任何区别。我不明白为什么你的后端服务坚持最低像素密度 当您以特定大小打印或显示图像或使用特定大小将其放置在文档中时,像素密度(或ppi)将变得相关 无论如何,没有充分的理由在捕获时设置特定的ppi。这可能就是苹果使用默认密度72ppi的原因。我不知道有什么方法可以在拍摄时改变它
但是,您可以稍后通过修改JPEG文件的EXIF数据来更改它,例如使用。72ppi的3264 x 2448像素图像和300ppi的3264 x 2448像素图像之间有什么区别?除了元数据中的一些细微差别外,几乎没有任何区别。我不明白为什么你的后端服务坚持最低像素密度 当您以特定大小打印或显示图像或使用特定大小将其放置在文档中时,像素密度(或ppi)将变得相关 无论如何,没有充分的理由在捕获时设置特定的ppi。这可能就是苹果使用默认密度72ppi的原因。我不知道有什么方法可以在拍摄时改变它
但是,您可以稍后通过修改JPEG文件的EXIF数据来更改它,例如使用。72ppi的3264 x 2448像素图像和300ppi的3264 x 2448像素图像之间有什么区别?除了元数据中的一些细微差别外,几乎没有任何区别。我不明白为什么你的后端服务坚持最低像素密度 当您以特定大小打印或显示图像或使用特定大小将其放置在文档中时,像素密度(或ppi)将变得相关 无论如何,没有充分的理由在捕获时设置特定的ppi。这可能就是苹果使用默认密度72ppi的原因。我不知道有什么方法可以在拍摄时改变它
但是,您可以在以后通过修改JPEG文件的EXIF数据来更改它,例如使用。正如@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
或保存到您的私人应用程序文件夹中。正如@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
或保存到您的私人应用程序文件夹中。正如@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
或保存到您的私人应用程序文件夹中。正如@Codo所指出的,在输出图像之前,像素密度是无关的(对显示器、打印机、RIP或其他任何东西)。它是元数据,而不是图像数据。但是,如果您与第三方服务打交道,而该第三方服务无法理解这一点,则需要编辑im