Chcę wyświetlić metadane obrazu za pomocą ios. Dane metadane, takie jak Przysłona, Shutterspeed, Kompensacja ekspozycji, ISO, Ogniskowa obiektywu itp. Proszę, pomóżcie mi, jeśli ktoś ma pomysł.Jak uzyskać metadane obrazu w ios
Odpowiedz
CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef) aUrl, NULL);
CGImageSourceRef source = CGImageSourceCreateWithData((CFDataRef) theData, NULL);
NSDictionary* metadata = (NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source,0,NULL);
Sprawdź zawartość słownika here.
Dzięki Jonas Schnelli. Bardzo mi to pomaga. Dzięki stary. –
Powinieneś oczywiście wspomnieć, że będziesz musiał dodać #import
Jeśli używasz ARC, podziel go tak, aby uniknąć wycieki pamięci: 'CFDictionaryRef dictRef = CGImageSourceCopyPropertiesAtIndex (source, 0, NULL); NSDictionary * metadata = (__bridge NSDictionary *) dictRef;
Oto kod, aby uzyskać meta danych ze ścieżki obrazu:
NSData *imagedata = [NSData dataWithContentsOfFile:imagePath];
CGImageSourceRef source = CGImageSourceCreateWithData((CFMutableDataRef)imagedata, NULL);
NSDictionary *metadata = [(NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source,0,NULL)autorelease];
Lub, w przypadku korzystania z szybkich 4.0:
var imagedata = Data(contentsOfFile: imagePath)
var source: CGImageSourceRef = CGImageSourceCreateWithData((imagedata as? CFMutableDataRef), nil)
var metadata = CGImageSourceCopyPropertiesAtIndex(source, 0, nil) as? [AnyHashable: Any]
jak to zrobić w swift3 lub swift4? –
var imagedata = Dane (contentsOfFile: imagePath) źródło var: CGImageSourceRef = CGImageSourceCreateWithData ((imagedata jako? CFMutableDataRef), zero) var metadata = CGImageSourceCopyPropertiesAtIndex (source, 0, nil) as? [AnyHashable: Any] –
mam nadzieję, że ci to pomoże –
Trzeba korzystać z zasobów bibliotecznych do zapoznania exif metadane obrazu .
#import <AssetsLibrary/AssetsLibrary.h>
a następnie dodaj następujący kod:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
__block NSMutableDictionary *imageMetadata = nil;
[library assetForURL:assetURL
resultBlock:^(ALAsset *asset) {
NSDictionary *metadata = asset.defaultRepresentation.metadata;
imageMetadata = [[NSMutableDictionary alloc] initWithDictionary:metadata];
NSLog(@"%@",imageMetadata.description);
}
failureBlock:^(NSError *error) {
}];
}
nadzieję, że pomoże
Nie działa, assetURL jest zawsze zerowy – malex
Oto co używam, aby uzyskać rozmiar obrazu:
+ (CGSize) sizeOfImage:(NSString *) fileName withPath: (NSURL *) fullDirectoryPath;
{
NSURL *imageNameWithPath = [NSURL URLWithString:fileName relativeToURL:fullDirectoryPath];
CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef) imageNameWithPath, NULL);
if (!source) return CGSizeZero;
CFDictionaryRef dictRef = CGImageSourceCopyPropertiesAtIndex(source,0,NULL);
NSDictionary* metadata = (__bridge NSDictionary *)dictRef;
NSLog(@"metadata= %@", metadata);
CGSize result = CGSizeZero;
CGFloat width = [metadata[@"PixelWidth"] floatValue];
CGFloat height = [metadata[@"PixelHeight"] floatValue];
NSLog(@"width= %f, height= %f", width, height);
// The orientation in the metadata does *not* map to UIImageOrientation. Rather, see: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGImageProperties_Reference/index.html#//apple_ref/doc/constant_group/Individual_Image_Properties
// This idea of orientation seems a little odd to me, but it seems it translates to even numbers need to be switched in width/height, odd numbers do not.
NSUInteger orientation = [metadata[@"Orientation"] integerValue];
switch (orientation) {
// Comments give "Location of the origin of the image"
case 1: // Top, left
case 3: // Bottom, right
case 5: // Left, top
case 7: // Right, bottom
result = CGSizeMake(width, height);
break;
case 2: // Top, right
case 4: // Bottom, left
case 6: // Right, top
case 8: // Left, bottom
result = CGSizeMake(height, width);
break;
default:
NSAssert(NO, @"Should not get to here!");
break;
}
CFRelease(source);
NSLog(@"size: %@, orientation: %d", NSStringFromCGSize(result), orientation);
return result;
}
/* Example meta data:
ColorModel = RGB;
Depth = 8;
Orientation = 6;
PixelHeight = 1936;
PixelWidth = 2592;
"{Exif}" = {
ColorSpace = 1;
PixelXDimension = 2592;
PixelYDimension = 1936;
};
"{JFIF}" = {
DensityUnit = 0;
JFIFVersion = (
1,
1
);
XDensity = 1;
YDensity = 1;
};
"{TIFF}" = {
Orientation = 6;
};
}
*/
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];
if(referenceURL) {
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:referenceURL resultBlock:^(ALAsset *asset) {
ALAssetRepresentation *rep = [asset defaultRepresentation];
NSDictionary *metadata = rep.metadata;
NSLog(@"image data %@", metadata);
} failureBlock:^(NSError *error) {
// error handling
}];
}
Lepiej podać kilka wyjaśnień w swojej odpowiedzi. – Envil
swift 4
static func imageDataProperties(_ imageData: Data) -> NSDictionary? {
if let imageSource = CGImageSourceCreateWithData(imageData as CFData, nil)
{
if let dictionary = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) {
return dictionary
}
}
return nil
}
Odpowiadając na moje własne pytanie. Pamięć-skuteczny i szybki sposób uzyskać metadane GPS jest
let options = [kCGImageSourceShouldCache as String: kCFBooleanFalse]
if let data = NSData(contentsOfURL: url), imgSrc = CGImageSourceCreateWithData(data, options) {
let metadata = CGImageSourceCopyPropertiesAtIndex(imgSrc, 0, options) as Dictionary
let gpsData = metadata[kCGImagePropertyGPSDictionary] as? [String : AnyObject]
}
Druga opcja jest
if let img = CIImage(contentsOfURL: url), metadata = img.properties(),
gpsData = metadata[kCGImagePropertyGPSDictionary] as? [String : AnyObject] { … }
wygląda ładniej w Swift ale zużywa więcej pamięci (sprawdzony przez Profiler).
zaktualizowane do iOS 11 ze zdjęciami ramach
Objective - C:
#import <Photos/Photos.h>
- (void)imagePickerController:(UIImagePickerController *)imagePicker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
PHAsset* asset = info[UIImagePickerControllerPHAsset];
[asset requestContentEditingInputWithOptions:nil completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
CIImage *fullImage = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL];
NSLog(@"%@", fullImage.properties.description);
}];
[imagePicker dismissViewControllerAnimated:YES completion:nil];
}
Trzeba również zgodę Photo Library Wykorzystanie (NSPhotoLibraryUsageDescription), a następnie można dodać następujący kod do wyświetlania zrobił załadowanie lub wyświetlenie pojawił się
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
switch (status) {
case PHAuthorizationStatusAuthorized:
NSLog(@"PHAuthorizationStatusAuthorized");
break;
case PHAuthorizationStatusDenied:
NSLog(@"PHAuthorizationStatusDenied");
break;
case PHAuthorizationStatusNotDetermined:
NSLog(@"PHAuthorizationStatusNotDetermined");
break;
case PHAuthorizationStatusRestricted:
NSLog(@"PHAuthorizationStatusRestricted");
break;
}
}];
- 1. Jak wyodrębnić metadane z pliku mp3 w ios development
- 2. Jak mogę usunąć metadane z obrazu JPEG w Javie?
- 3. Jak dołączyć metadane do obrazu w programie Matlab?
- 4. Jak pisać niestandardowe metadane do obrazów PNG w iOS
- 5. iPhone iOS, jak wyodrębnić metadane ze zdjęć i informacje o geotagowaniu z obrazu z rolki aparatu?
- 6. iOS: jak uzyskać wymiary obrazu bez jego otwierania?
- 7. WCF Jak włączyć metadane?
- 8. Czy mogę uzyskać metadane dla przestrzeni nazw?
- 9. Rzadkie dopasowywanie obrazu w iOS
- 10. Dekompresja obrazu w iOS 7
- 11. Segmentacja obrazu dla iOS
- 12. Jak uzyskać metadane bazy danych z menedżera encji
- 13. Jak uzyskać URI obrazu przechowywanego w zasobach
- 14. jak uzyskać URI zasobu obrazu w android
- 15. Jak uzyskać aktualną pozycję obrazu w jQuery?
- 16. ios Odkodować część obrazu
- 17. Konwencje nazewnictwa obrazu iOS
- 18. Jak odczytać metadane z mp3?
- 19. Jak ustawić metadane nagłówka w zakodowanym wideo?
- 20. Jak uzyskać iOS 6 UITableView Zgrupowane style w IOS 7
- 21. Jak określić metadane dla dask.dataframe
- 22. Jak uzyskać sharedApplication w Swift na iOS?
- 23. Jak uzyskać status roamingu w IOS
- 24. Jak uzyskać dane przyspieszenia w IOS?
- 25. Jak uzyskać część obrazu i użyć go jako osobnego obrazu?
- 26. Udostępnianie obrazu iOS w sieciach społecznościowych
- 27. Przesunięcie obrazu w WPF, aby zmienić obraz, jak w iOS
- 28. metadane (EXIF, TIFF, itd.) W PhotoKit
- 29. Jak mogę odczytać metadane PNG z PHP?
- 30. Jak uzyskać nazwę obrazu za pomocą jQuery?
co masz na myśli przez metadane obrazu (nazwa, rozmiar i kilka innych)? Proszę opracować ... –