如何获得UIImage的dpi / ppi?

时间:2013-11-14 08:35:43

标签: ios objective-c

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

3 个答案:

答案 0 :(得分:4)

要从存储在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

答案 1 :(得分:2)

<强>目标C

获取图像分辨率:

CGFloat imageResolution = myImage.scale * 72.0f;

从'标准'UIImage(72 dpi)以300dpi创建图像:

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

<强>夫特

获得解决方案:

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 dpi更改为300 dpi会导致质量损失,因为您没有图片详细信息。

最重要的一点是,除非渲染图像,否则分辨率并不意味着什么。在此之前,你得到了你得到的那些......你可以通过设置目标矩形大小来确定观察者看到的最终分辨率。

由创建者应用程序修复的文件分辨率不在图像数据本身中,而是在元数据中。如上一个答案所述,或在以下地址:

How to get image metadata in ios

答案 2 :(得分:0)

Swift 5解决方案: 您可以从图像元数据获取DPI信息。 imageData 是NSData类型。

var string_value = JSON.stringify(JSON_VALUE);
var JSON_VALUE_in_KB = string_value.length / 1024;