`
jsntghf
  • 浏览: 2476466 次
  • 性别: 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");
}

 

分享到:
评论

相关推荐

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

    主要介绍了java编程简单获取图片像素的方法,涉及Java针对图片的读取与属性获取技巧,具有一定参考借鉴价值,需要的朋友可以参考下

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

    主要介绍了js判断图片加载完成后获取图片实际宽高的方法,涉及JavaScript图片加载及属性操作相关技巧,需要的朋友可以参考下

    Javascript获取background属性中url的值

    最近在做项目的时候遇到一个问题,需要获取一个动态预览的图片的地址,这其实不是什么问题,主要是该图片的路径是写在css的background-img属性中的,于是决定要用js获取它的url中的内容,下面给大家分享解决的方法,...

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

    介绍了利用Python读取图片属性信息的方法,读取的内容包括GPS 信息、图片分辨率、图片像素、设备商、拍摄设备等,有需要的朋友们可以参考借鉴。

    JS获取图片lowsrc属性的方法

    主要介绍了JS获取图片lowsrc属性的方法,涉及javascript操作网页图片属性的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    JS获取网页图片name属性的方法

    主要介绍了JS获取网页图片name属性的方法,涉及javascript操作图片属性的技巧,非常具有实用价值,需要的朋友可以参考下

    VB 单选按钮的属性、方法与事件实例

    VB 单选按钮的属性、方法与事件实例 VB 单选按钮的属性、方法与事件实例

    c#获取图片正确格式的方法

    大部分时候,我们可以通过从图片路径中截取扩展名的方式拿到一个图片的格式: ...Image 类型包含一个类型为 ImageFormat 的 RawFormat 属性,通过它我们可以准确的拿到图片的格式。如果我们直接调用 Raw

    C#获取图片的后缀名解析

    在C#中并没有提供直接获取图片格式的方法,如果想根据图片(也就是Image对象)获取图片格式,那么就需要另辟蹊径了。 首先,我们可以在`Image`对象中看到一个类型为`ImageFormat`的`RawFormat`属性。但是,通过这个...

    javascript实现获取图片大小及图片等比缩放的方法

    主要介绍了javascript实现获取图片大小及图片等比缩放的方法,涉及javascript针对图形图像相关属性获取与修改相关操作技巧,需要的朋友可以参考下

    04 JS通过图片连接获取图片的尺寸大小

    问题描述 项目中有这样一个需求,就是从后台返回了一个图片的链接,然后前端要将这个图片叠加到地图上。在实现这个需求的时候,需要获取到... //获取图片大小 var currentImg = new Image(); currentImg.src = h

    html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片

    为大家介绍一款JS截图插件html2canvas.js,它可以通过纯JS对浏览器端经行截屏,下面就为大家介绍一下html2canvas.js属性和具体使用方法,并为大家提供了一个实例

    Android程序技术:动画属性动画.pptx

    这里使用相对布局作为整体布局,布局中通过四个按钮的点击事件,分别实现图片imageview 的垂直移动,缩放,旋转透明度和圆形旋转的变化效果。;获取父窗体的宽度、高度 使用ofInt方法设置指定动画的数值区间。 设置...

    java正则表达式获取指定HTML标签的指定属性值且替换的方法

    下面小编就为大家带来一篇java正则表达式获取指定HTML标签的指定属性值且替换的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

    JS获得图片alt信息的方法

    主要介绍了JS获得图片alt信息的方法,涉及javascript获取图片元素及对应alt属性的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    java 图片压缩 iphone拍照上传旋转问题处理压缩工具类

    java 图片压缩 iphone拍照上传旋转问题处理,压缩工具类 首先导入jar 包,通过imgxz获取图片是否旋转属性,在调用旋转方法,旋转过来,然后在进行压缩

    详解Html5中video标签那些属性和方法

    最近在写一个自定义播放器, 写之前我们肯定要把播放器的属性和方法全部过一遍,知彼知己,方能百战不殆嘛…后面会把自己写的播放器和踩过的一些坑也上传上来 video标签行内属性 src:视频的URL poster:视频封面,...

    JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法

    主要介绍了JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法,涉及JS页面元素遍历及属性动态操作相关技巧,需要的朋友可以参考下

    两种方法实现用CSS切割图片只取图片中一部分

    主要有两种方式,一是做为某一元素的背景图片,二是用img元素的属性。 方法一: 用CSS中元素的background : background-color || background-image || background-repeat || background-attachment || background-...

Global site tag (gtag.js) - Google Analytics