SORU
6 AĞUSTOS 2009, PERŞEMBE


UİİmagePickerController ve mevcut fotoğraflardan EXIF verileri ayıklamak

UİİmagePickerController seçimden sonra fotoğraf meta verileri geri gelmiyor da. Ancak, birkaç apps uygulama mağazası (Mobil Maps, PixelPipe) gibi okuyabilir orijinal dosyaları ve EXIF verileri saklı içinde, sağlayan uygulamayı ayıklamak için coğrafi seçili fotoğraf.

Bu orijinal dosyayı okuyarak bunu yapmak için görünüyorlar/özel/var/mobile/Media/DCIM/100APPLE/ varklasör ve EXIF bir kütüphane üzerinden çalışıyor.

Ancak, bir fotoğraf diskteki bir dosyaya UİİmagePickerController döndü eşleşen bir şekilde çalışamaz. Dosya boyutları keşfettim, ama orijinal dosyayı geri görüntü raw Uİİmage, imkansız seçilen görüntü dosyasının boyutunu bilmek yapıyor JPEG, bir iken.

Karma bir tablo yapmak ve her görüntünün ilk x piksel karşı eşleşen düşünüyorum. Bu üst olsa da, ve muhtemelen oldukça yavaş bir bit gibi görünüyor.

Herhangi bir öneriniz var mı?

CEVAP
27 Aralık 2009, Pazar


Bu exıf iPhone kütüphanede bir göz attım.

http://code.google.com/p/iphone-exif/

Benim tarafta deneyin. GPS UİİmagePickerController ile çekilmiş olan resim koordinatları: / istiyorum

Derin bir bakıştan sonra, bu kütüphane bir giriş olarak bilimsel deneyler bazen büyük bir bilgi almak gibi görünüyor ve UİİmagePickerController bir anlık aldıktan sonra bir Uİİmage verir. Eğer Uİİmage için Uİkit kategorisinden seçilen kullanırsak teoride NSData * UIImageJPEGRepresentation ( UIImage *image, CGFloat compressionQuality ); bilimsel deneyler bazen büyük bir örneği haline Uİİmage dönüştürmek ve iPhone exif kütüphane ile onu kullanalım O zaman.

GÜNCELLEME:


#import "EXFJpeg.h"

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
    NSLog(@"image picked %@ with info %@", image, editingInfo);
    NSData* jpegData = UIImageJPEGRepresentation (image,0.5);
    EXFJpeg* jpegScanner = [[EXFJpeg alloc] init];
    [jpegScanner scanImageData: jpegData];
    EXFMetaData* exifData = jpegScanner.exifMetaData;
    EXFJFIF* jfif = jpegScanner.jfif;
    EXFTag* tagDefinition = [exifData tagDefinition: [NSNumber numberWithInt:EXIF_DateTime]];
    //EXFTag* latitudeDef = [exifData tagDefinition: [NSNumber numberWithInt:EXIF_GPSLatitude]];
    //EXFTag* longitudeDef = [exifData tagDefinition: [NSNumber numberWithInt:EXIF_GPSLongitude]];
    id latitudeValue = [exifData tagValue:[NSNumber numberWithInt:EXIF_GPSLatitude]];
    id longitudeValue = [exifData tagValue:[NSNumber numberWithInt:EXIF_GPSLongitude]];
    id datetime = [exifData tagValue:[NSNumber numberWithInt:EXIF_DateTime]];
    id t = [exifData tagValue:[NSNumber numberWithInt:EXIF_Model]];
....
....

Tanım TAMAM etiketleri alınıyor, ama etiket değerleri döndürür nil :(

Kütüphaneye bir deneyin vermek istiyorsanız, bunu çalıştırmak için global bir değişken doktor açıkladı ama..: / hum olarak tanımlamak gerekir

BOOL gLogging = FALSE;

GÜNCELLEME 2iPhone - access location information from a photo Bir Uİİmage meta bilgileri saklanması değildirçok sıkıştık : emin olun, hiçbir EXIF bilgisi bu arabirim üzerinden verilecektir.

SON GÜNCELLEMEBu UİİmagePickerController tetikleme önce, CLLocationManager geçerli CLocation almak için kullanılacak -(NSData*) geotagImage:(UIImage*)image withLocation:(CLLocation*)imageLocation { NSData* jpegData = UIImageJPEGRepresentation(image, 0.8); EXFJpeg* jpegScanner = [[EXFJpeg alloc] init]; [jpegScanner scanImageData: jpegData]; EXFMetaData* exifMetaData = jpegScanner.exifMetaData; // end of helper methods // adding GPS data to the Exif object NSMutableArray* locArray = [self createLocArray:imageLocation.coordinate.latitude]; EXFGPSLoc* gpsLoc = [[EXFGPSLoc alloc] init]; [self populateGPS: gpsLoc :locArray]; [exifMetaData addTagValue:gpsLoc forKey:[NSNumber numberWithInt:EXIF_GPSLatitude] ]; [gpsLoc release]; [locArray release]; locArray = [self createLocArray:imageLocation.coordinate.longitude]; gpsLoc = [[EXFGPSLoc alloc] init]; [self populateGPS: gpsLoc :locArray]; [exifMetaData addTagValue:gpsLoc forKey:[NSNumber numberWithInt:EXIF_GPSLongitude] ]; [gpsLoc release]; [locArray release]; NSString* ref; if (imageLocation.coordinate.latitude <0.0) ref = @"S"; else ref =@"N"; [exifMetaData addTagValue: ref forKey:[NSNumber numberWithInt:EXIF_GPSLatitudeRef] ]; if (imageLocation.coordinate.longitude <0.0) ref = @"W"; else ref =@"E"; [exifMetaData addTagValue: ref forKey:[NSNumber numberWithInt:EXIF_GPSLongitudeRef] ]; NSMutableData* taggedJpegData = [[NSMutableData alloc] init]; [jpegScanner populateImageData:taggedJpegData]; [jpegScanner release]; return [taggedJpegData autorelease]; }

// Helper methods for location conversion -(NSMutableArray*) createLocArray:(double) val{ val = fabs(val); NSMutableArray* array = [[NSMutableArray alloc] init]; double deg = (int)val; [array addObject:[NSNumber numberWithDouble:deg]]; val = val - deg; val = val*60; double minutes = (int) val; [array addObject:[NSNumber numberWithDouble:minutes]]; val = val - minutes; val = val*60; double seconds = val; [array addObject:[NSNumber numberWithDouble:seconds]]; return array; } -(void) populateGPS:(EXFGPSLoc* ) gpsLoc :(NSArray*) locArray{ long numDenumArray[2]; long* arrPtr = numDenumArray; [EXFUtils convertRationalToFraction:&arrPtr :[locArray objectAtIndex:0]]; EXFraction* fract = [[EXFraction alloc] initWith:numDenumArray[0]:numDenumArray[1]]; gpsLoc.degrees = fract; [fract release]; [EXFUtils convertRationalToFraction:&arrPtr :[locArray objectAtIndex:1]]; fract = [[EXFraction alloc] initWith:numDenumArray[0] :numDenumArray[1]]; gpsLoc.minutes = fract; [fract release]; [EXFUtils convertRationalToFraction:&arrPtr :[locArray objectAtIndex:2]]; fract = [[EXFraction alloc] initWith:numDenumArray[0] :numDenumArray[1]]; gpsLoc.seconds = fract; [fract release]; }

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • PhoneArena

    PhoneArena

    7 NİSAN 2006
  • TecNoob

    TecNoob

    15 AĞUSTOS 2013
  • TomSka

    TomSka

    30 Mayıs 2006