UIImage附加信息(exif)..

//惨痛经历,,,

- (void)saveToAlbumWithImage:(UIImage*)image

completionBlock:(void (^)(NSURL *assetURL))completionBlock

failureBlock:(void (^)(NSError *error))failureBlock

{

NSData* pngData =  UIImagePNGRepresentation(image);

CGImageSourceRef source = CGImageSourceCreateWithData((__bridge_retained CFDataRef)pngData, NULL);

NSDictionary *metadata = (__bridge NSDictionary *)(CGImageSourceCopyPropertiesAtIndex(source, 0, NULL));

NSMutableDictionary *metadataAsMutable = [[NSMutableDictionary dictionaryWithDictionary:metadata] mutableCopy];

//For EXIF Dictionary

NSMutableDictionary *EXIFDictionary = [[metadataAsMutable objectForKey:(NSString *)kCGImagePropertyExifDictionary]mutableCopy];

if(!EXIFDictionary)

EXIFDictionary = [NSMutableDictionary dictionary];

[EXIFDictionary setObject:@"200x300-1....." forKey:(NSString*)kCGImagePropertyExifUserComment];

//add our modified EXIF data back into the image’s metadata

[metadataAsMutable setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary];

CFStringRef UTI = CGImageSourceGetType(source);

NSMutableData *dest_data = [NSMutableData data];

CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)dest_data, UTI, 1, NULL);

if(destination)

{

CGImageDestinationAddImageFromSource(destination, source, 0, (__bridge CFDictionaryRef) metadataAsMutable);

BOOL success = CGImageDestinationFinalize(destination);

if(success)

{

//            CIImage *testImage = [CIImage imageWithData:dest_data];

//

//            NSDictionary *propDict = [testImage properties];//////////............由此应可知以上无误,,,,,,,

//

//            UIImage *newImage = [UIImage imageWithData:dest_data];

//            NSData* pngData1 =  UIImagePNGRepresentation(newImage);

//

//            CGImageSourceRef source1 = CGImageSourceCreateWithData((CFDataRef)pngData1, NULL);

//            NSDictionary *metadata1 = (__bridge NSDictionary *)(CGImageSourceCopyPropertiesAtIndex(source1, 0, NULL));

//

NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];

NSString *appName = [infoDictionary objectForKey:@"CFBundleDisplayName"];

ALAssetsLibrary *assets1Library = [[ALAssetsLibrary alloc] init];

////////metadataAsMutable.............定位到问题,,,,,,,

//////............衡量标准,,,,,,,,,,,,,.......

[assets1Library saveImage:image.CGImage metadata:metadataAsMutable toAlbum:appName completion:^(NSURL *assetURL, NSError *error) {//////...........苹果的角度..,,,,,,,,

completionBlock(assetURL);

if(destination)

CFRelease(destination);

CFRelease(source);

} failure:failureBlock];

}

}

}

时间: 2024-11-08 01:49:24

UIImage附加信息(exif)..的相关文章

DataTables学习:从最基本的入门静态页面,使用ajax调用Json本地数据源实现前端开发深入学习,根据后台数据接口替换掉本地的json本地数据,以及报错的处理地方,8个例子(显示行附加信息,回调使用api,动态显示和隐藏列...),详细教程

一.DataTables  个人觉得学习一门新的插件或者技术时候,官方文档是最根本的,入门最快的地方,但是有时候看完官方文档,一步步的动手写例子,总会出现各种莫名其妙的错误,需要我们很好的进行研究出错的地方. 官方网站(中文):http://datatables.club/ 官方网站:https://www.datatables.net/  二.简单的例子 怎样简单地使用DataTables?使用下方简单的几行代码,一个方法初始化table. $(document).ready(function

Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示

注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定点的定位以及附加信息的展示.这样我们的项目就更加完善了,从宏观上看到每个点,从微观上分析每个点的不同.这种方法往往在大数据可视化方面很有效果. Angularjs+node+Mysql实现地图上的多点标注原文地址:http://www.cnblogs.com/DonaHero/p/5815595.h

92、建筑材料的燃烧性能和附加信息

1.建筑材料:指单一物质均匀分布的混合物,如金属.木材.混凝土.聚合物等: 2.建筑材料的燃烧性能等级: 燃烧性能等级 名称 A 不燃 B1 难燃 B2 可燃 B3 易燃 3.附加信息:建筑材料的燃烧性能等级附加信息包括:产烟特征等级.燃烧滴落物/微粒等级.燃气毒性等级. 燃烧性能等级附加信息标识为:GB 8624□(□-□,□,□),其中,五个□参数依次表达的含义如下: 标识 等级 燃烧性能等级 A.B1.B2.B3 燃烧特征等级 A2.B.C.D 产烟特征等级 s1.s2.s3 燃烧滴落物/

VC问题 IntelliSense:“没有可用的附加信息”,[请參见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]

在XP上安装VS2010 后发现 IntelliSense不能使用,但在Windows7上是能够正常使用这功能的.关于IntelliSense不能使用的问题已有网友提出了是由于KB2876217这个补丁引起的,卸载这个补丁就可以.可是这是一个OLE漏洞相关的补丁.卸载有风险,在准备卸载的时候看了下这个补丁的官方文档,发现能够通过安装另外一个补丁来解决问题: 有关KB2876217安全更新的已知问题 当您通过执行 Windows XP Service Pack 3 的电脑在 Microsoft V

VC问题 IntelliSense:“没有可用的附加信息”,[请参见“C++项目 IntelliSense 疑难解答”,获得进一步的帮助]

在XP上安装VS2010 后发现 IntelliSense不能使用,但在Windows7上是可以正常使用这功能的,关于IntelliSense不能使用的问题已有网友提出了是因为KB2876217这个补丁引起的,卸载这个补丁即可,但是这是一个OLE漏洞相关的补丁,卸载有风险,在准备卸载的时候看了下这个补丁的官方文档,发现可以通过安装另外一个补丁来解决这个问题: 有关KB2876217安全更新的已知问题 当您通过运行 Windows XP Service Pack 3 的电脑在 Microsoft

[HTML表格]在databases显示行的附加信息

模板代码: <!-- DataTables CSS --> <link rel="stylesheet" href="{% static 'DataTables/css/jquery.dataTables.css' %}"> <!-- jquery --> <script src="{% static 'js/jquery/jquery.min.js' %}"></script> <

logstash 数据插入mongodb,去掉附加信息,若删除@timestamp,插入数据会报错

input { file { path => ['/gwlog/data/**/*.json'] discover_interval => 1 ignore_older => 5 start_position => "beginning" close_older => 6 max_open_files => 200000 codec => json } } filter { mutate { remove_field => ["

Android获取Exif信息

获取Exif信息 代表的是文件的头信息; 步骤: 步骤一: // 获取指定的文件的头信息对象 ExifInterface exif = new ExifInterface("/sdcard/x.jpg"); 步骤二: 获取指定的头信息: // 获取指定的信息 // 获取拍摄时间 String time =exif.getAttribute(ExifInterface.TAG_DATETIME); System.out.println("拍摄时间是:===" + ti

http 头信息详解(转)

HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采用了请求/响应模型.客户端向服务器发送一个请求,请求头包含请求的方法.URI.协议版本.以及包含请求修饰符.客户信息和内容的类似于MIME的消息结构.服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息.实体元信息以及可能的实体内容. 通常HTTP消息包括客户机向服务器的请求消息和服