- 浏览: 2541547 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
jsntghf:
peio 写道这个怎么运行?Ruby On Rails的环境搭 ...
多文件上传之uploadify -
peio:
这个怎么运行?
多文件上传之uploadify -
往事如烟1:
我的项目是自己init了一个原始的project,之后将ver ...
React Native热部署之CodePush -
jsntghf:
往事如烟1 写道我按照你的说明进行,发现app退出之后,在进入 ...
React Native热部署之CodePush -
往事如烟1:
我按照你的说明进行,发现app退出之后,在进入不正确,请问是什 ...
React Native热部署之CodePush
首先,将AssetsLibrary.framework、CoreLocation.framework和ImageIO.framework加入到项目中。
PhotoLibViewController.h
#import <UIKit/UIKit.h> #import <AssetsLibrary/AssetsLibrary.h> @interface PhotoLibViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { } - (IBAction)toGetImage:(id)sender; @end
PhotoLibViewController.m
#import "PhotoLibViewController.h" #import "PhotoLibImageInfoController.h" #import "HHLocationManager.h" #import <ImageIO/ImageIO.h> @implementation PhotoLibViewController - (NSMutableDictionary *)updateExif:(CLLocation *)currentLocation{ NSMutableDictionary *locDict = [[NSMutableDictionary alloc] init]; CLLocationDegrees exifLatitude = currentLocation.coordinate.latitude; CLLocationDegrees exifLongitude = currentLocation.coordinate.longitude; [locDict setObject:currentLocation.timestamp forKey:(NSString *)kCGImagePropertyGPSTimeStamp]; if (exifLatitude < 0.0) { exifLatitude = exifLatitude * (-1); [locDict setObject:@"S" forKey:(NSString *)kCGImagePropertyGPSLatitudeRef]; } else { [locDict setObject:@"N" forKey:(NSString *)kCGImagePropertyGPSLatitudeRef]; } [locDict setObject:[NSNumber numberWithFloat:exifLatitude] forKey:(NSString *)kCGImagePropertyGPSLatitude]; if (exifLongitude < 0.0) { exifLongitude = exifLongitude * (-1); [locDict setObject:@"W" forKey:(NSString *)kCGImagePropertyGPSLongitudeRef]; } else { [locDict setObject:@"E" forKey:(NSString *)kCGImagePropertyGPSLongitudeRef]; } [locDict setObject:[NSNumber numberWithFloat:exifLongitude] forKey:(NSString *) kCGImagePropertyGPSLongitude]; return [locDict autorelease]; } - (void)dealloc { [super dealloc]; } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewDidUnload { [super viewDidUnload]; } #pragma mark - IBAction - (IBAction)toGetImage:(id)sender { UIButton *button = (UIButton *)sender; UIImagePickerController *iconPickerController = [[UIImagePickerController alloc] init]; if (button.tag == 51) { iconPickerController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; } else if (button.tag == 50) { iconPickerController.sourceType = UIImagePickerControllerSourceTypeCamera; iconPickerController.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto; iconPickerController.showsCameraControls = YES; } iconPickerController.delegate = self; [self presentModalViewController:iconPickerController animated:YES]; [[HHLocationManager shared] startStandardUpdates]; [iconPickerController release]; } #pragma mark UIImagePickerControllerDelegate - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; if (![mediaType isEqualToString:@"public.image"]) { return; } NSURL *imageURL = [info objectForKey:UIImagePickerControllerReferenceURL]; ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; CGImageRef imageRef = [[info objectForKey:UIImagePickerControllerOriginalImage] CGImage]; typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset); typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error); typedef void (^ALAssetsLibraryWriteImageCompletionBlock)(NSURL *assetURL, NSError *error); ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) { ALAssetRepresentation *rep = [myasset defaultRepresentation]; CGImageRef iref = [rep fullResolutionImage]; PhotoLibImageInfoController *imageInfo = [[PhotoLibImageInfoController alloc] initWithNibName:@"PhotoLibImageInfoController" bundle:nil]; imageInfo.image = [UIImage imageWithCGImage:iref]; imageInfo.imageInfo = [rep metadata]; NSLog(@"ALAssetRepresentation: %@", [rep metadata]); [self.navigationController pushViewController:imageInfo animated:YES]; [imageInfo release]; [library release]; }; ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror) { NSLog(@"Error, cant get image - %@", [myerror localizedDescription]); [library release]; }; ALAssetsLibraryWriteImageCompletionBlock completionblock = ^(NSURL *assetURL, NSError *error) { [library assetForURL:assetURL resultBlock:resultblock failureBlock:failureblock]; NSLog(@"Error, cant save image - %@", [error localizedDescription]); }; if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { NSDictionary *gpsDict = [self updateExif:[[HHLocationManager shared] thisLocation]]; NSMutableDictionary *imageMetaData = [NSMutableDictionary dictionary]; [imageMetaData setObject:gpsDict forKey:(NSString *)kCGImagePropertyGPSDictionary]; [library writeImageToSavedPhotosAlbum:imageRef metadata:imageMetaData completionBlock:completionblock]; } else { [library assetForURL:imageURL resultBlock:resultblock failureBlock:failureblock]; } [picker performSelector:@selector(dismissModalViewControllerAnimated:) withObject:[NSNumber numberWithBool:YES] afterDelay:1.0]; } @end
PhotoLibImageInfoController.h
#import <UIKit/UIKit.h> @interface PhotoLibImageInfoController : UIViewController { } @property (nonatomic, retain) IBOutlet UIImageView *imageView; @property (nonatomic, retain) IBOutlet UITextView *info; @property (nonatomic, retain) NSDictionary *imageInfo; @property (nonatomic, retain) UIImage *image; @end
PhotoLibImageInfoController.m
#import "PhotoLibImageInfoController.h" @implementation PhotoLibImageInfoController @synthesize imageView, info, imageInfo, image; - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { imageInfo = [[NSDictionary alloc] init]; image = [[UIImage alloc] init]; } return self; } - (void)dealloc { [image release]; [imageInfo release]; [imageView release]; [info release]; [super dealloc]; } #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (image) self.imageView.image = image; if (imageInfo) self.info.text = [imageInfo description]; } - (void)viewDidUnload { [super viewDidUnload]; } @end
示例输出:
{ ColorModel = RGB; DPIHeight = 100; DPIWidth = 100; Depth = 8; PixelHeight = 120; PixelWidth = 120; "{Exif}" = { ColorSpace = 1; ComponentsConfiguration = ( 1, 2, 3, 0 ); ExifVersion = ( 2, 2, 1 ); FlashPixVersion = ( 1, 0 ); PixelXDimension = 120; PixelYDimension = 120; SceneCaptureType = 0; }; "{GPS}" = { Latitude = "31.2795"; LatitudeRef = N; Longitude = "120.7431666666667"; LongitudeRef = E; }; "{TIFF}" = { ResolutionUnit = 2; XResolution = 100; YResolution = 100; "_YCbCrPositioning" = 1; }; }
- PhotoLib.zip (57.3 KB)
- 下载次数: 39
发表评论
-
Error watching file for changes: EMFILE
2016-12-15 11:57 1307执行npm start后报错: Error watc ... -
CocoaPods升级1.1.1报错
2016-12-15 08:39 797ERROR: While executing gem .. ... -
Visual Studio Code运行React Native报错
2016-06-13 09:43 1617React Native:0.27.2 React:15 ... -
React Native 0.27.2编译报错this._nativeModule.addListener is not a function
2016-06-12 15:21 3861React Native:0.27.2 React:15 ... -
Unable to resolve module ReactDefaultPerf from
2016-06-02 13:04 2788package.json信息如下: "reac ... -
React Native 0.26.2编译报错Undefined symbols for architecture x86_64
2016-05-26 11:15 2025React Native:0.26.2 React:15. ... -
Failed to update auto layout status: Failed to load designables from path (null)
2016-04-05 22:11 1718确保CocoaPods是0.36.1以上版本,然后在podf ... -
集成微信支付出现Undefined symbols for architecture x86_64错误
2016-03-21 13:22 1752Undefined symbols for architec ... -
React Native热部署之CodePush
2016-01-10 22:27 6251本文使用的环境是Mac OS 10.11.1、Xcode ... -
浅谈React Native中的FlexBox布局
2015-11-17 18:38 4308React Native通过一个基于FlexBox的布局引 ... -
React Native之构建一个简单的列表页
2015-10-23 14:45 2168本文中我们将创建一个简单的电影应用,这个应用将从Rotten ... -
React Native之环境搭建
2015-10-20 16:30 1450本文使用的环境是Mac O ... -
获取图片属性的方法
2015-10-18 20:43 3146很多时候我们需要获 ... -
NSCache的下标用法
2015-09-18 00:19 1218NSCache类和NSDictionary类很相似,也提供 ... -
如何给category添加属性
2015-08-16 10:41 694主要是使用了runtime中的associative机制。 ... -
UITableView的两种重用Cell方法的区别
2015-08-10 13:07 16155UITableView中有两种重用Cell的方法: - ... -
SDImageCache.m报错Unused variable 'fileName'
2015-08-04 21:56 1178GCC手册中的相关解释: unused:This att ... -
Swift调用Objective-C
2015-07-13 23:33 1230Swift调用Objective-C需要一个名为<工程 ... -
使用GCD实现倒计时
2015-07-24 21:47 1088__block int timeout = 60; // ... -
导航栏加分割线的实现
2015-07-01 22:00 1770self.view.backgroundColor = [U ...
相关推荐
摘要:本文讲述了使用 C# 读取图片的 EXIF 信息的方法,包括读取照片 ISO 感光度、曝光时间、快门速度、闪光灯、曝光模式、照片宽度、高度、f 值、曝光程序、光谱感知、EXIF 版本、色彩设置、压缩比率、光圈值、亮度...
总之,PHP读取照片EXIF信息是一个涉及多个步骤的过程,从了解EXIF信息开始,到安装必要的扩展模块,最后使用PHP内置的函数来读取和解析照片文件中的EXIF数据。这一系列动作允许开发者在Web应用程序中实现照片信息的...
这个源码示例是关于如何使用Delphi XE来读取照片的缩略图和EXIF信息,这对于图像处理或者照片管理软件的开发非常重要。 EXIF(Exchangeable Image File Format)是嵌入在JPEG或TIFF等图像文件中的元数据,包含拍摄...
本项目提供了用C++编写的读取EXIF信息的类,使得开发者无需深入了解EXIF的复杂结构,就能方便地从图片文件中提取这些数据。下面我们将深入探讨这个类的实现原理和使用方法。 首先,C++类的设计通常包含构造函数、析...
以下是对VB IPTC和EXIF信息读取的详细解释: IPTC(International Press Telecommunications Council)信息是新闻摄影领域广泛使用的标准,用于存储图像的描述性信息。这些信息包括标题、作者、版权信息、关键词、...
插件描述:用于论坛上传JPG... 主要功能: 1、上传文件时即可读取Exif信息并写入数据库,减少帖子显示时再读取Exif信息导致的页面拖延 2、支持论坛水印开启后的Exif信息显示 3、支持同时显示以往上传的文件显示Exif信息
通过以上步骤,你就能使用metadata-extractor库成功地从Java程序中读取照片的Exif信息了。这个强大的工具可以帮助开发者在处理图像时获取更多有价值的数据,无论是进行数据分析、图像编辑还是元数据管理,都能发挥...
标题“VC读取JPG照片Exif信息(VS2010编译通过)”涉及的知识点主要集中在C++编程,特别是使用Visual Studio 2010(VS2010)开发环境,以及利用MFC(Microsoft Foundation Classes)框架处理JPEG图像的Exif...
在Android平台上,开发人员经常需要处理图像数据,其中包括读取图片的Exif信息。Exif(Exchangeable Image File Format)是一种扩展的JPEG格式,用于存储与图像相关的信息,如拍摄日期、时间、地理位置、相机型号、...
Delphi读取Exif图像信息,搞图片或摄影的大概都知道Exif是什么吧,图像最原始的信息,一张只是不是合成的照片,只要是从数码相机中拍摄出来的照片,都会有EXIF信息,这里面记录了图像拍摄时的参数信息和图像属性信息...
综上所述,这个C++项目结合了Exif数据处理和Qt GUI编程技术,为用户提供了一种查看和理解照片Exif信息的工具。通过深入学习和实践,开发者不仅可以掌握Exif信息的读取方法,还能提升在C++和Qt上的技能。
Delphi7写的读取JPEG文件Exif信息的类(含中文注释及Exif v2.3官方文档,含显示TIF格式的GraphicEx库) 支持JPEG格式的缩略图读取,TIF格式的暂时未遇到,不知正确与否。 记录为摩托罗拉CPU格式的Exif信息暂时未遇到...
Exif信息通常包含了拍摄照片时的各种详细参数,如拍摄日期和时间、相机型号、曝光时间、光圈大小、ISO感光度、白平衡设置、地理位置等。这些信息对于摄影爱好者和专业摄影师来说非常有价值,因为他们可以据此调整...
以下将详细介绍读取数码照片EXIF信息的相关知识点,并基于提供的源码文件"Exif.pas"进行解析。 首先,我们要知道读取EXIF信息需要用到特定的库或API,例如Java中的ImageIO,Python中的PIL(Pillow),或者是C++中的...
照片自动分类归并,自动读取照片文件的exif信息.rar
一个常用的库是"ImageMagick",它提供了Magick.NET组件,可以用来读取和操作Exif信息。首先需要安装ImageMagick,并在VB6项目中引用Magick.NET的DLL文件。 下面是一段示例代码,演示了如何使用Magick.NET读取Exif中...
通过上述步骤,我们可以创建一个C++类,读取并解析数码照片中的EXIF信息,从而获取到关于照片的丰富元数据。这在图像处理、数据分析或开发摄影相关的应用程序时非常有用。当然,实际应用中还需要考虑性能优化、错误...
项目中的核心部分是`ReadPicExif`类,它实现了读取照片EXIF信息的功能。这个类通常会包含以下关键步骤: 1. **加载图片**:使用`ImageIO.read()`方法从文件中读取图像,返回一个`BufferedImage`对象。 2. **获取元...
纯 python 写的,批量读取照片的 Exif 信息(重点是GPS坐标)保存到 csv, xlsx 文件中的小程序,图形界面,操作简单。读取几千张照片,几分钟的事情。并且借鉴网友的算法尝试做了不同坐标系的转换。 下载压缩包,...