如何获得UIImage的dpi / ppi?

如何在iOS中获取图像的dpi / ppi? 也许原始图像文件包含这些信息,所以我可以从NSData获得ppi / dpi? 谢谢。

要从存储在NSData中的图像中提取DPI,请在项目中包含Apple的ImageIO框架并使用以下命令:

#import <ImageIO/ImageIO.h> // Set your NSData up NSData *data = some image data // Get the DPI of the image CGImageSourceRef imageRef = CGImageSourceCreateWithData((__bridge CFDataRef)(data), NULL); CFDictionaryRef imagePropertiesDict = CGImageSourceCopyPropertiesAtIndex(imageRef, 0, NULL); NSString *dpiHeight = CFDictionaryGetValue(imagePropertiesDict, @"DPIHeight"); NSString *dpiWidth = CFDictionaryGetValue(imagePropertiesDict, @"DPIWidth"); 

请注意,并非所有图像都包含DPI信息。 它可能包含或不包含在图像的元数据中。

这个答案是基于Flar49的答案,这是正确的,但增强直接从NSData获取信息。 有关更多信息,请参阅http://iosdevelopertips.com/data-file-management/get-image-data-including-depth-color-model-dpi-and-more.html

什么样的形象?

对于UIImage类的图像,这是相当简单的。

 CGFloat imageResolution = myImage.scale * 72.0f; 

从“标准”UIImage(72 dpi)以300dpi创build图像:

 UIImage *my300dpiImage = [UIImage imageWithCGImage:mySourceImage.CGImage scale:300.0f/72.0f orientation:UIImageOrientationUp] ; 

好朋友,我投降! :P善良,不要低估了,我的评论只是一点(坏)幽默。 ;)有时候,swift或obj-c并不重要。 对我来说,问题是关于公式,而不是语法。

正如我在评论中所说,这几乎是一样的

获得分辨率(对于标准设备 – 在这个时代仍然是72dpi):

 let imageResolution = myImage.scale * 72.0 

更改图片分辨率:

 // Just be sure source image is valid if let source = mySourceImage, let cgSource = source.cgImage { let my300dpiImage = UIImage(cgImage: cgSource, scale: 300.0 / 72.0, orientation: source.imageOrientation) } 

请注意,我已经在swift示例中添加了对源图像方向的尊重,并且请注意,将分辨率从72更改为300 dpi将导致质量损失,因为您没有图像细节。

  • 如果您使用“智能”缩放algorithm,转换为更高的dpi可能是一个select。
  • 转换为较低的dpi是一个更常见的select – 例如,如果你需要保持图像缩略图caching。 您可以将图像转换为72dpi或216dpi,如果设备是高清,并且您想要缩略图(x3)。

最重要的是分辨率并不意味着什么,除非图像被渲染。 在此之前,你得到了你得到的一切。由观察者看出,通过设置目标矩形的大小,由你决定最终的分辨率。

由创build者应用程序修复的文件的分辨率不在图像数据本身中,而是在元数据中。

如何在ios中获取图像元数据

我可以原谅吗? :)干杯!