`
jsntghf
  • 浏览: 2542392 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

获取图片属性的方法

    博客分类:
  • iOS
阅读更多

很多时候我们需要获取一些图片的属性,例如图片的大小、元数据等。最简单的方法就是使用UIImage实现。

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"pic.JPG"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
CGSize imageSize = image.size;

 

这种实现方式的问题就是必须完整的将图片载入到内存才能获取图片的属性。

 

从iOS 4开始,苹果的SDK提供了一个更好的解决方案,那就是CGImageSource(需要导入ImageIO.framework)。这种实现方式就不需要将图片载入到内存。

 

例如,获取图片的大小,使用CGImageSource的实现方式如下:

#import <ImageIO/ImageIO.h>

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"pic.JPG"];
NSURL *imageFileURL = [NSURL fileURLWithPath:path];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)imageFileURL, NULL);
if (imageSource) {
    NSDictionary *options = @{(NSString *)kCGImageSourceShouldCache:@NO};
    CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (__bridge CFDictionaryRef)options);
    if (imageProperties) {
        NSNumber *width = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth);
        NSNumber *height = (NSNumber *)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight);
        NSLog(@"Image dimensions: %@ x %@ px", width, height);
        CFRelease(imageProperties);
    }
        
    CFRelease(imageSource);
} else {
    NSLog(@"Error loading image");
}

 

上面的例子中CGImageSourceCopyPropertiesAtIndex()返回的数据中包含了很多图片尺寸以外的信息,例如EXIF、IPTC等。

 

下面举一个例子,用来说明如何获取我们需要的特定属性。例如拍照日期、相机型号、GPS信息。

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"pic.JPG"];
NSURL *imageFileURL = [NSURL fileURLWithPath:path];
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)imageFileURL, NULL);
if (imageSource) {
    NSDictionary *options = @{(NSString *)kCGImageSourceShouldCache:@NO};
    CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (__bridge CFDictionaryRef)options);
    if (imageProperties) {
        CFDictionaryRef exif = CFDictionaryGetValue(imageProperties, kCGImagePropertyExifDictionary);
        if (exif) {
            NSString *dateTakenString = (NSString *)CFDictionaryGetValue(exif, kCGImagePropertyExifDateTimeOriginal);
            NSLog(@"Date Taken: %@", dateTakenString);
        }
        
        CFDictionaryRef tiff = CFDictionaryGetValue(imageProperties, kCGImagePropertyTIFFDictionary);
        if (tiff) {
            NSString *cameraModel = (NSString *)CFDictionaryGetValue(tiff, kCGImagePropertyTIFFModel);
            NSLog(@"Camera Model: %@", cameraModel);
        }
        
        CFDictionaryRef gps = CFDictionaryGetValue(imageProperties, kCGImagePropertyGPSDictionary);
        if (gps) {
            NSString *latitudeString = (NSString *)CFDictionaryGetValue(gps, kCGImagePropertyGPSLatitude);
            NSString *latitudeRef = (NSString *)CFDictionaryGetValue(gps, kCGImagePropertyGPSLatitudeRef);
            NSString *longitudeString = (NSString *)CFDictionaryGetValue(gps, kCGImagePropertyGPSLongitude);
            NSString *longitudeRef = (NSString *)CFDictionaryGetValue(gps, kCGImagePropertyGPSLongitudeRef);
            NSLog(@"GPS Coordinates: %@ %@ / %@ %@", longitudeString, longitudeRef, latitudeString, latitudeRef);
        }
        
        CFRelease(imageProperties);
    }
        
    CFRelease(imageSource);
} else {
    NSLog(@"Error loading image");
}

 

分享到:
评论

相关推荐

    html5通过javascript预览图片以及获取图片属性

    获取图片属性,如宽度、高度等,可以等待图片加载完成后,通过`img`元素的`naturalWidth`和`naturalHeight`属性获取: ```javascript imgPreview.onload = function() { console.log('图片宽度:', this....

    详细方法获取文件属性

    不同文件类型(如图片、文档)的元数据获取方式各异,通常需要特定的库或工具。 7. **云存储服务**: - 对于如Amazon S3、Google Drive或Dropbox等云存储服务,需要使用其提供的API或SDK来获取文件属性,这些属性...

    js判断图片加载完成后获取图片实际宽高的方法

    在JavaScript中,传统的做法是通过DOM元素的`.offsetWidth`或`.offsetHeight`属性获取图片的宽度和高度。或者,在使用jQuery时,我们可以用`.width()`和`.height()`方法来获取这些尺寸。然而,这种方法在图片尺寸被...

    java编程简单获取图片像素的方法

    在Java编程中,获取图片像素是一项常见的任务,特别是在图像处理、计算机视觉或数据分析等领域。本文将详细介绍如何使用Java API来简单地获取图片的像素信息。 首先,我们需要导入相关的Java类库,包括`java.awt....

    Javascript获取background属性中url的值

    然后,使用`.css("backgroundImage")`方法来获取该元素的`background-image`属性值。这将返回一个字符串,格式通常是`url("图片路径")`。 为了从这个字符串中提取出实际的图片URL,我们需要进行字符串处理。这里...

    vb.net获取文件的各种属性

    以上是VB.NET中获取文件属性的基本方法。通过结合这些属性,你可以构建更复杂的逻辑,如搜索特定类型的文件、检查文件的权限、处理大文件等。在实际项目中,根据需求,还可以使用其他`System.IO`类,如`...

    layui select获取自定义属性方法

    通过在form.on('select')事件的回调函数中使用data.elem.getAttribute方法,可以轻松获取到自定义属性的值。这个方法的参数就是自定义属性的名称,比如在这个例子中,"data-aid"是自定义属性的名称,我们就可以通过...

    IE9浏览器下 使用JS获取图片尺寸大小 的方法

    在IE9浏览器中,由于浏览器兼容性和安全策略的限制,获取图片尺寸大小的方法与现代浏览器有所差异。这篇文章将深入探讨如何使用JavaScript在IE9中获取图片的宽度和高度。我们还将提供一个示例代码,帮助你更好地理解...

    Python读取图片属性信息的实现方法

    在Python编程中,获取图片属性信息是一项常见的任务,尤其在图像处理或数据分析领域。本篇文章将详细介绍如何利用Python脚本来读取图片的各种属性,包括GPS信息、图片分辨率、图片像素、设备制造商和拍摄设备等。 ...

    Vb获取图片尺寸大小

    在VB(Visual Basic)编程中,获取图片的尺寸大小,包括长度、宽度以及彩色位数,是常见的操作,尤其在处理图像数据时。这涉及到对图像文件的读取和解析,以便获取其元数据。以下将详细介绍如何在VB中实现这一功能。...

    firefox7.0及以上版本获取图片路径方法

    在探讨如何在Firefox 7.0及以上版本中获取图片路径的方法之前,我们首先需要理解一些基本的概念和技术背景。本文将深入解析两种主要方法:利用`getAsDataURL()`和`createObjectURL()`函数,来帮助读者更好地掌握在...

    vba属性和方法大全

    例如,要改变工作表的背景色,可以先通过`ColorIndex`属性获取当前颜色,然后用`SetBackgroundPicture`方法设置新的背景图片。 **VBA对象模型**是理解属性和方法的关键。对象模型将应用程序的组件组织成层次结构,...

    JQ 获取图片真实宽高

    通过以上介绍,我们可以了解到,使用jQuery获取图片真实宽高需要结合图片的加载事件和相应的jQuery方法。在实际应用中,考虑到性能和兼容性,我们还需要关注一些细节处理,如错误处理、异步加载情况以及性能优化等。...

    js 动态设置图片的热区并获取图片坐标

    在JavaScript中,动态设置图片的热区(hotspots)并获取图片坐标是一项常见的需求,尤其在交互式网页设计中。热区技术允许我们为图片指定特定的交互区域,用户点击或悬停在这些区域上时可以触发特定的事件。本文将...

    WebBrowser获取图片类库

    在上述代码中,`getAttribute("src", 0)`方法用于获取图片的源URL。如果需要下载这些图片,可以使用`System.Net.WebClient`类或者`System.Net.Http.HttpClient`类发起HTTP请求并保存到本地。 值得注意的是,`mshtml...

    python获取远程图片大小和尺寸的方法

    通过Image.open方法打开一个图像文件对象(在这里是一个cStringIO StringIO对象),然后可以使用format属性获取图片格式、size属性获取图片尺寸(以(宽度,高度)元组形式给出)、mode属性获取图片的色彩模式(如RGB、...

    Android 图片属性信息修改(定位信息修改).rar

    这个资源包“Android 图片属性信息修改(定位信息修改).rar”提供了无须root权限的方法来访问和编辑手机上的图片元数据。下面我们将深入探讨这个主题。 首先,Android系统提供了一个名为ExifInterface的API,它...

    获取设备属性

    获取屏幕密度的方法如下: ```java int densityDpi = metrics.densityDpi; float density = metrics.density; ``` 其中,`densityDpi`表示设备的物理像素密度,而`density`是逻辑像素密度,它是以160dpi(mdpi)为...

    上传图片获取图片信息(兼容IE和火狐)

    3. **获取图片元数据**:一旦有了DataURL,我们可以通过创建`Image`对象并赋值给`src`属性来预加载图片,然后通过`naturalWidth`和`naturalHeight`属性获取原始尺寸,通过`src`属性获取MIME类型。 ```javascript ...

    android java反射,通过图片名获取图片

    在给定的场景中,“android java反射,通过图片名获取图片”这个主题涉及到利用反射机制来动态地加载和使用资源图片。下面将详细阐述这一知识点。 首先,我们需要理解Java反射的基本概念。Java反射是Java语言提供的...

Global site tag (gtag.js) - Google Analytics